【问题标题】:Could not cast value of type 'NSTaggedPointerString' (0x10146ecd8) to 'NSNumber' (0x102675600)无法将“NSTaggedPointerString”(0x10146ecd8)类型的值转换为“NSNumber”(0x102675600)
【发布时间】:2017-10-04 03:57:44
【问题描述】:

我正在尝试在我的代码中创建这样的循环:

for row in rows! {
        print("Row",row)
        let pin = Pin.init(latitude: row[0] as! Float, longitude: row[1] as! Float, pinType: row[2] as! String, beaconID: row[3] as! Int, altitude: row[4] as! Float)
        pinList.append(pin)
    }

这里,row 是一个Any,我正在根据该行的值创建 pin 对象。

这是我的 Pin 类:

class Pin {
    var latitude:Float
    var longitude:Float
    var pinType:String
    var beaconID:Int
    var altitude:Float

    init(latitude:Float, longitude:Float, pinType:String, beaconID:Int, altitude:Float){
        self.latitude = latitude
        self.longitude = longitude
        self.pinType = pinType
        self.beaconID = beaconID
        self.altitude = altitude
    }
}

但是我收到了这个错误:

无法将“NSTaggedPointerString”(0x10146ecd8) 类型的值转换为“NSNumber”(0x102675600)。

当我尝试创建 Pin 对象时。

谁能帮我解决这个问题?谢谢。

【问题讨论】:

标签: swift class object nstaggedpointerstring


【解决方案1】:
id = Int((content[0]["id"] as! NSString).floatValue)

这对我来说很好。内容为json数组

【讨论】:

    【解决方案2】:

    没想到,我通过阅读许多文档找到了答案。 这是解决此问题的方法。

    for row in rows! {
            print("Row",row)
            let lat = (row[0] as! NSString).floatValue
            let lng = (row[1] as! NSString).floatValue
            let pType = (row[2] as! NSString) as String
            let bID = (row[3] as! NSString).integerValue
            let alti = (row[4] as! NSString).floatValue
    
            let pin = Pin.init(latitude: lat, longitude: lng, pinType: pType, beaconID: bID, altitude: alti)
            pinList.append(pin)
        }
    

    我首先尝试将所有值从 row 转换为 NSString 并将结果转换为我真正转换为的类型。 :)

    【讨论】:

    • 桥接到NSString(甚至回到String)是一个非常糟糕的解决方案。
    猜你喜欢
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多