无法将NSNumber桥接到Float

时间:2018-08-14 16:54:16

标签: swift nsnumber

在迁移Xcode版本时,我的现有项目出现运行时错误。有人可以帮忙吗?我的打字错误吗?

代码:

let x    = d[ChildItem.KEY_LOOK] as! NSArray as Array
let y    = d[ChildItem.KEY_COOR] as! NSArray as Array
let item = ChildItem(x as! [Float], y as! [Float])

错误:

  

线程5:致命错误:无法将NSNumber桥接到Float

我知道如何像在SO(Unable to bridge NSNumber to Float in JSON parsing)上那样将NSNumber转换为Float:

    if let n = d.value(forKey: "probability") as? NSNumber {
    let f = n.floatValue }

如何为NSNumber数组执行此操作?

每个d []键中都有类似以下的JSON字符串:

  

d [ChildItem.KEY_LOOK] = [465918.2,5681518.0,4462.3203]

2 个答案:

答案 0 :(得分:0)

您需要使用NSNumber的floatValue属性,而不是直接进行强制转换。

答案 1 :(得分:-1)

假设您有从服务器调用中获得的一系列数字

d[ChildItem.KEY_LOOK] = [465918.2, 5681518.0,4462.3203] // from your example

您可以执行以下操作

//As from your example that can be directly convert to Array of Doubles like this
if let arrayOfDoubles = d[ChildItem.KEY_LOOK] as? [Double] {
        debugPrint(arrayOfDoubles)
}

如果由于某种原因您希望这些人成为[NSNumber],那么您可以这样做

if let arrayOfNumbers = d[ChildItem.KEY_LOOK] as? [NSNumber] {

        //to make this array of double
     let doubleArray = arrayOfNumbers.map { $0.doubleValue }

        //to make int
     let intArray = arrayOfNumbers.map { $0.intValue }

     ... and so on
}