2016-04-16 104 views
1

當談到使用字典和NSDictionaries時,我對Swift感到非常沮喪。Swift NSDictionary兒童類型

我從服務器拉數據。其中一個值是Bool。

我開始使用Swift Dictionary,並且因爲挫折而轉移到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時,它說我無法將字符串轉換爲數字。當我嘗試將其轉換爲字符串時,它說我無法將數字轉換爲字符串。

這裏的數據是什麼樣子:

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

這是我從服務器轉換數據:如果讓字典:NSDictionary的= snapShot.value as? NSDictionary {data = dict.allValues [0]爲? NSDictionary –

+0

難道你的服務器發送給你的是Bool的不一致表示 - 有時是一個字符串,其他時候是一個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)