【发布时间】:2018-04-06 08:53:21
【问题描述】:
升级到 Xcode 9.3 (9E145) 后,我的应用出现了一些意外行为。似乎问题在于将 NSNumber 转换为浮点数。我为此使用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 构造函数的 Float 实例化也成功,即 z == 1.12。将 n 转换为 Double 成功,对我来说,这根本没有意义。
谁能向我解释这种行为? IE。谁能给我一个很好的理由为什么将 n 转换为 Float 失败?这是一个错误吗?如果这是预期行为,您能否参考描述此行为的 Swift 文档中的位置?
【问题讨论】:
-
为什么要使用 as 进行类型转换?为什么不使用 NSNumber 的 floatValue & doubleValue 方法??
-
@rishi : 在我的应用程序中我使用的是 as?运算符,因为要转换的值实际上是 Any?由网络服务(firebase)返回。 Firebase 使用 NSNumber 来表示数值。