var stringNumber: String = "555"var intValue = Int(stringNumber) // returns optional(555)var doubleNumber: Double = 555var fromDoubletoInt = Int(doubleNumber) // returns 555
因此,如果我尝试转换大于最大整数的双数,它会崩溃而不是返回nil.
var doubleNumber: Double = 55555555555555555555var fromDoubletoInt = Int(doubleNumber) // Crashes here
我知道还有另一种方法来检查双数是否大于最大整数值,但我很好奇为什么它会以这种方式发生.
解决方法 如果我们考虑到大多数双打,转换为Int只是意味着删除小数部分:let pIEInt = Int(3.14159) // 3
然后,Int(Double)构造函数返回nil的唯一情况是溢出的情况.
对于字符串,转换为Int会返回一个可选的,因为通常是字符串,例如“Hello world!”不能以普遍有意义的方式表示为Int.因此,在字符串不能表示为整数的情况下,我们返回nil.顺便说一下,这包括可以完美表示为双精度或浮点数的值:
考虑:
let iPi = Int("3.14159")let dPi = Double("3.14159")
在这种情况下,iPi为零,而dPi为3.14159.为什么?因为“3.14159”没有有效的Int表示.
但同时,当我们使用带有Double并返回非可选的Int构造函数时,我们得到一个值.
那么,如果改变了那个构造函数以返回一个可选项,为什么它会为3.14159而不是nil返回3? 3.14159不能表示为整数.
但是如果你想要一个返回可选Int的方法,当Double溢出时返回nil,你就可以编写该方法.
extension Double { func toInt() -> Int? { let minInt = Double(Int.min) let maxInt = Double(Int.max) guard case minInt ... maxInt = self else { return nil } return Int(self) }}let a = 3.14159.toInt() // returns 3let b = 555555555555555555555.5.toInt() // returns nil总结
以上是内存溢出为你收集整理的为什么将Double转换为Int不会在Swift中返回可选的Int?全部内容,希望文章能够帮你解决为什么将Double转换为Int不会在Swift中返回可选的Int?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)