2017-10-17 124 views
-2

我試圖將一個int傳遞給另一個類如0902,並且發送的結果丟失了第一個零。這隻有在零引導時纔會發生。快速丟失前導零

我也有一個函數,試圖添加它但也不起作用。 Swift中沒有保留前導零Int的原因是什麼?

如果我將0902的值發送給另一個類,之後顯示的是902,完全混淆。

func convertToTime(_ value: Int) -> String { 
     print(value) // 902 
     var text = String(format: "%02d", value) 
     text.insert(":", at: text.index(text.startIndex, offsetBy: +2)) 
     return text 
    } 
+3

它爲什麼要保持0,則表示沒有爲詮釋這種形式 –

+5

前導零是沒有價值的,並因爲它是一個int,這是一個數字的數字,它就會失去前導零。如果你打算有一個前導零,請嘗試將其轉換爲字符串。 –

+2

@Lu_是對的。對於Int來說0沒有任何意義如果你想這樣做,你可以聲明它爲字符串而不是整數。 – luckyShubhra

回答

0

你的函數參數更改爲String:

func convertToTime(_ value: String) -> String { 
    print(value) // prints "0902" 
    var text = value 
    text.insert(":", at: text.index(text.startIndex, offsetBy: +2)) 
    return text 
} 

convertToTime("0902") // prints "09:02" 
-1
func convert(integerToTimeString int: Int) -> String{ 
    var string = "\(int)" 
    if string.count > 3{ 
     string.insert(":", at: string.index(string.startIndex, offsetBy: String.IndexDistance(2))) 
     return string 
    } 
    string.insert("0", at: string.startIndex) 
    string.insert(":", at: string.index(string.startIndex, offsetBy: String.IndexDistance(2))) 
    return string 
} 

試試這個代碼,而不是

它的詮釋第一轉換爲字符串,並檢查是否增加前的4個字符「 :「

1

這裏的問題是如何定義值」0902「的類型?

難道是真的有多少?

或者它實際上是一個只包含數值的字符串嗎?

像電話號碼一樣。這是一個數字嗎?或者一個字符串?

想把它們加在一起嗎?或者乘以它們?如果不是,請將其設爲字符串。

一旦你使它成爲一個字符串,領先的0不再是一個問題,因爲它只是字符串的一部分。只要你把它做成一個數字,那麼前導零就在0902 == 902之內就沒有意義了。

附加

有過再看看這...難道連一個字符串?你在這裏處理時間?所以你應該使用NSDate對象?

雖然問題仍然存在。確保你正確地定義你的類型。

確定這個「0902」實際上是什麼。然後使其成爲正確的類型。

無論是數字,字符串還是日期。

正確的類型將確保您獲得正確的格式,以及它的功能和屬性。