你有基金會進口?如果你這樣做的話,斯威夫特有時會開始做一些假設。刪除導入有助於解決其中的一些問題。從第一行開始。
var foo: Dictionary<String, AnyObject>[] = [["grapes": 10, "blueberries": "twelve"], ["carrots": "fifteen"]]
沒有基礎,Swift在這條線上扼流圈。 Swift字典不符合AnyObject協議,因爲它們是類。如果基礎類可用,swift假定你的意思是NSDictionary並使用它。
通過將AnyObject更改爲Any,我們可以在沒有Foundation的情況下使用它。現在我們可以正常使用所有這些代碼:
var bar = foo[0]["grapes"] as Int
var dict = foo[0] as Dictionary<String, Any>
var grapesValue = dict["grapes"] as Int
我在dict上添加了一個轉換,並刪除了!下標後。 NSDictionary返回一個隱式解包可選,但與一個詞典,我們知道我們會得到的東西。
所有這些代碼都可以與導入的Foundation一起工作,但爲了找出Swift正在做出的假設以及如何解決這些假設,刪除它很有幫助。
你可能想看看這article,幫助我。
編輯:您在轉換中獲取該錯誤的原因是因爲NSDictionary只能存儲AnyObjects,所以它必須使用NSNumber而不是Int。如果你有基金會進口,Swift也會來回翻譯。雖然在這種情況下,由於某種原因無法弄清楚最後一行。 Bryan和fqdn提出的解決方法似乎能夠將Swift強制理解。這一個也適用於我:
var dict = foo[0] as NSDictionary
var grapesValue = dict["grapes"] as Int
你得到什麼錯誤? – jtbandes
使用'as'向下轉換爲'Int' –