一尘不染

无法将NSNumber桥接到Float Swift 3.3

swift

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

randomVariable = jsonDict["jsonKey"] as? Float ?? 0

它过去可以正常工作,但是在更新后,它始终默认为0。为了确定原因,我尝试强制将其强制转换为Float如下所示

randomVariable = jsonDict["jsonKey"] as! Float

这导致以下错误

无法将NSNumber桥接到Float

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


阅读 422

收藏
2020-07-07

共1个答案

一尘不染

如您所知,您可能需要先将其转换为NSNumber

像这样:

randomVariable = (jsonDict["jsonKey"] as? NSNumber)?.floatValue ?? 0

也许正则表达式替换将帮助您更新代码。

模式: jsonDict\[([^\]]*)\] as\? Float

用。。。来代替: (jsonDict[$1] as? NSNumber)?.floatValue

2020-07-07