在升级到Xcode 9.3(9E145)后,我的应用程序出现了一些意外行为。问题似乎在将NSNumber转换为Float时发生了。我使用as
类型转换运算符来处理这个问题。请参考以下示例。
let n = NSNumber.init(value: 1.12)
let m = NSNumber.init(value: 1.00)
let x = n as? Float
let y = m as? Float
let xd = n as? Double
let z = Float(truncating: n)
在这里,第一个强制转换失败,即x == nil
。第二个强制转换成功,并使用init:truncating
构造函数实例化了一个浮点数,即z == 1.12
。将n转换为Double成功,对我来说完全没有意义。
有人能向我解释这种行为吗?也就是说,有人能给我一个很好的理由,为什么将n强制转换为Float会失败吗?这是一个错误吗?如果这是预期的行为,您可以引用Swift文档中描述此行为的位置吗?