Ios NSMutableDictionary将NSString值视为NSNumber

Ios NSMutableDictionary将NSString值视为NSNumber,ios,swift,nsstring,nsmutabledictionary,nsnumber,Ios,Swift,Nsstring,Nsmutabledictionary,Nsnumber,我在NSMutableDictionary中有以下值-参见图 我试图得到“a”,因此: 应用程序在此时崩溃,原因是 无法将“\u NSCFNumber”(0x…)类型的值强制转换为“NSString”(0x…)。 “”内的其他数字被视为字符串,字符串外的数字则被转换为字符串而没有任何问题 有人能告诉我发生了什么事吗?如何轻松获取这些值?该值是一个NSNumber,而不是NSString。您可以使用stringValue对其进行转换: if let a = d["a"] as? NSNumber

我在NSMutableDictionary中有以下值-参见图

我试图得到“a”,因此:

应用程序在此时崩溃,原因是

无法将“\u NSCFNumber”(0x…)类型的值强制转换为“NSString”(0x…)。

“”内的其他数字被视为字符串,字符串外的数字则被转换为字符串而没有任何问题


有人能告诉我发生了什么事吗?如何轻松获取这些值?

该值是一个
NSNumber
,而不是
NSString
。您可以使用
stringValue
对其进行转换:

if let a = d["a"] as? NSNumber {
    let aString = a.stringValue
    println(aString) // -1
} else {
    // either d doesn't have a value for the key "a", or d does but the value is not an NSNumber
}
如果您确定它存在并且是一个
NSNumber
,则可以使用强制展开、强制转换和字符串插值:

let a = d["a"]! as! NSNumber
let aString = "\(a)"

字典{“a”:“-1”}和您的代码块是错误类型吗?您可以在强制转换之前使用
Is
关键字检查类型,例如
let isString=dictionary[“a”]Is String
是-我刚刚测试过,是de bugger将引号括在-1周围。我原以为它是在存储字符串,但事实并非如此……对于我在Xcode 7.1中发现的一个bug,这是一个非常好的解决方法。非常感谢。我发现模式识别似乎不像以前版本的Xcode那样有效。
let a = d["a"]! as! NSNumber
let aString = "\(a)"