2015-09-04 100 views
2

我有一个在解析XML文件后创建的NSDictionary。它将一些数值(例如6757677)存储为一个字符串。现在我想将它读入NSNumber。我曾尝试以下操作:在swift中从nsdictionary获取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 

这些转化率在目标C简单但在Swift中让我很难过。

+0

尝试获得dictRef [“referralID”]作为的NSString然后转换为NSNumber的 –

回答

0

试试这个

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

您需要通过通过long long(最大的有符号整数型)或double(最大浮点型)采取了迂回的NSStringNSNumber转换。例如:

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) 

注意,对于一个字符串转换为它的双重价值,您可能需要使用一个NSNumberFormatter正确解析字符串和处理区域设置相关的差异(例如,小数点分隔符是一个.美国,但德国的,)。

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 
} 
+0

现在32位的iOS设备上;-)尝试'2147483649'当您的解决方案是正确的,我建议你去'而不是longLongValue'。 – DarkDust

+0

这将取决于OP的需求 –