2017-04-15 86 views
0

我有我的文件conveted到Swift3,一個字典就像Swift3,如何在字典中添加AnyObject?

var Detail: [String:[String:AnyObject]] = [ 
     "0":["0":["number":0,"imageName":"40"]], 
     "1":["0":["number":1,"imageName":"3setting"],"1":["number":1,"imageName":"3private"],"2":["number":1,"imageName":"3currency"]], 
     "2":["0":["number":1,"imageName":"3favourite"],"1":["number":1,"imageName":"3favourite"]], 
     "3":["0":["number":1],"1":["number":1]], 
     ] 

我工作完全過去,但今天它提醒

語境型「AnyObject」不能用字典字面

使用

但爲什麼現在不工作? 爲什麼會發生這種情況,以及如何解決它?

+0

如果你的內部字典有靜態鍵,那麼你應該將它們建模爲'struct's。另外,如果你的外部字典的鍵只能是整數,那麼就讓它們成爲'Int' - 如果它們是連續的,那麼你最好使用數組來代替。總的來說,你可能需要'[[SomeStruct]]'。 – Hamish

回答

3

[String:Any]而不是[String:AnyObject],你會沒事的。至於「發生了什麼」:自動橋接消失了(例如,在Int和NSNumber之間,或者String和NSString之間)。因此,像["imageName":"3setting"]這樣的字面字典被推斷爲[String:String],並且在期望[String:AnyObject]的地方不能被分配 - 因爲String是而不是是AnyObject。但一個字符串肯定是一個Any,因爲的一切是一個Any。

你也可以通過編寫["number":1 as NSNumber, "imageName":"3setting" as NSString](因爲NSNumber或NSString AnyObject)來解決這個問題,但是在這裏看起來沒有什麼意義。在一般情況下,字典現在是[AnyHashable:Any],您應該使用它作爲所有類型; AnyObject基本上會慢慢地,但確定地離開。

+0

謝謝!有用 –