你有基金会进口?如果你这样做的话,斯威夫特有时会开始做一些假设。删除导入有助于解决其中的一些问题。从第一行开始。
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' –