2017-10-17 87 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”实际上是什么。然后使其成为正确的类型。

无论是数字,字符串还是日期。

正确的类型将确保您获得正确的格式,以及它的功能和属性。