相关疑难解决方法(0)

将NSNumber转换为Float时出现意外行为

升级到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)
Run Code Online (Sandbox Code Playgroud)

这里,第一次演员失败,即x == nil.第二个演员成功,并且init:truncating构造函数的Float实例化也成功,即z == 1.12.n对双人的演员成功了,对我来说,完全没有意义.

任何人都可以向我解释这种行为吗?也许任何人都可以给我一个很好的理由为什么n浮动失败?这是一个错误吗?如果这是预期的行为,您能否参考描述这个的Swift文档中的位置?

ios swift swift4

3
推荐指数
1
解决办法
633
查看次数

无法将NSNumber桥接到Float Swift 3.3

在Xcode更新后,我遇到了一个奇怪的问题.在我的应用程序中,当我从API获得响应时,我手动解析它并将其映射到我的模型.在我的代码中有很多地方我将JSON值转换Float为null合并,如下所示:

randomVariable = jsonDict["jsonKey"] as? Float ?? 0
Run Code Online (Sandbox Code Playgroud)

它曾经工作正常,但在更新后,它总是默认为0.为了确定原因,我试着强制将它投射到Float下面

randomVariable = jsonDict["jsonKey"] as! Float
Run Code Online (Sandbox Code Playgroud)

这导致以下错误

无法将NSNumber桥接到Float

经过进一步调查,我发现Xcode正在使用Swift 3.3(以前,它使用的是Swift 3.2).我在StackOverflow上找到的解决方案围绕着将其转换为NSNumber而不是Float.正如我上面提到的,我的应用程序中有类似的代码行.我想知道是否有办法解决这个问题.也许使用某种扩展?

json swift

2
推荐指数
2
解决办法
2645
查看次数

标签 统计

swift ×2

ios ×1

json ×1

swift4 ×1