在swift中从nsdictionary获取NSNumber

时间:2015-09-04 07:11:10

标签: ios iphone swift

我在解析XML文件后创建了NSDictionary。它将一些数值(例如,6757677)存储为字符串。现在我想把它读成NSNumber。我试过以下:

alert.versionNumber = dictRef["VersionNumber"] as! NSNumber

但我收到以下错误:

Could not cast value of type '__NSCFString' (0x1081c9c50) to 'NSNumber' (0x1076abb88).

我也尝试过以下但是得到同样的错误:

let refID:NSNumber = dictRef["referralID"] as! NSNumber
        alert.refID = refID.integerValue

这些转换在Objective C中很简单,但在Swift中让我很难过。

3 个答案:

答案 0 :(得分:1)

您需要通过NSString(最大有符号整数类型)或NSNumber(最大浮点类型)绕道而行long long转换为double )。例如:

let string : NSString = "42"

// Integer solution:
let intermediate = string.longLongValue
let number = NSNumber(longLong: intermediate)

// Floating point solution:
let intermediate2 = string.doubleValue
let number2 = NSNumber(double: intermediate2)

请注意,要将字符串转换为其double值,您可能需要使用NSNumberFormatter来正确解析字符串并处理与区域设置相关的差异(例如,小数点分隔符为.在美国,但在德国,。)

答案 1 :(得分:0)

试试这个

var num:NSNumber = NSNumber(integer:(dictRef["referralID"] as! NSString).integerValue)

答案 2 :(得分:0)

let dictRef = NSDictionary(objects: ["6757677","1234567"], forKeys: ["VersionNumber", "referralID"])

if let versionNumber = dictRef.valueForKey("VersionNumber")?.integerValue {
    let myNSNumber = NSNumber(integer: versionNumber)
    println(myNSNumber) // 6757677
}