2015-09-04 2 views
2

У меня есть NSDictionary, который я создал после разбора XML-файла. Он хранит некоторое числовое значение (например, 6757677) в виде строки. Теперь я хочу прочитать его в NSNumber. Я попытался следующие:Получение NSNumber из nsdictionary в swift

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.

+0

попытаться получить dictRef [ «referralID»], как NSString затем преобразовать в NSNumber –

ответ

0

Попробуйте

var num:NSNumber = NSNumber(integer:(dictRef["referralID"] as! NSString).integerValue) 
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) 

Обратите внимание, что для преобразования строки в ее двойную стоимость, вам, возможно, придется использовать 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

Теперь попробуйте '2147483649' на 32-битном IOS устройства ;-) Хотя ваше решение является правильным, я бы рекомендовал пойти на' longLongValue' вместо этого. – DarkDust

+0

Это будет зависеть от потребностей ОП –

Смежные вопросы