2016-04-16 2 views
1

У меня много разочарований в Swift, когда речь заходит о работе со словарями и NSDictionaries.Swift NSDictionary Типы детей

Я тяну данные с сервера. Одним из значений является Bool.

Я начал с словаря Swift и перешел в NSDictionary из-за разочарования. Тем не менее, я все еще не могу получить значения из словаря.

Все последующие завершаться противоречивые ошибки:

let unread:Bool = data!["unread"] as! Bool 
let unread:Bool = data?["unread"] as! Bool 
let unread:Bool = data?.objectForKey("unread") as! Bool 
let unread:NSNumber = data?["unread"] as! NSNumber 

ошибка: Не удалось бросить значение типа 'NSTaggedPointerString' (0x110c1eae8) к 'NSNumber' (0x10e0ab2a0).

Хорошо, похоже, что данные поступают в виде строки ... давайте попробуем:

let unreadStr:String = data!["unread"] as! String 
let unreadStr:NSString = data!["unread"] as! NSString 

Ошибка: Не удалось ввергнуть значение типа '__NSCFBoolean' (0x1097413b8) к 'NSString' (0x106bcdb48) ,

Так что я смущен. Когда я пытаюсь преобразовать его в Bool, он говорит, что я не могу преобразовать String в Number. Когда я пытаюсь преобразовать его в String, он говорит, что я не могу преобразовать число в строку.

Вот что данные выглядит следующим образом:

Optional({ 
    senderId = 10154040; 
    sent = 1460844986973; 
    text = "Test Message 1"; 
    unread = false; 
}) 
+0

Это, как я преобразовать данные с сервера: если позволить ДИКТ: NSDictionary = snapShot.value как? NSDictionary { let data = dict.allValues ​​[0] as? NSDictionary –

+0

Может ли быть, что ваш сервер посылает вам непоследовательные представления о Bool - иногда как String, иногда как Bool? –

+0

Я просто подключил SwiftyJSON, и теперь все отлично работает. https://github.com/SwiftyJSON/SwiftyJSON –

ответ

2

Вы должны попробовать что-то вдоль этих линий:

let data: [String : Any] = ["first" : "test", "second" : 2, "third" : true] 

let first = data["first"] as! String 
let second = data["second"] as! Int 
let third = data["third"] as! Bool 

print(first) 
print(second) 
print(third) 
Смежные вопросы