我正在使用Swift中的字典,它需要保存不同类型的值,尽管键几乎都是字符串.使用Objective-C这很容易,但Swift通常非常有用的类型安全性似乎使这更加困难.
我一直在使用[String:AnyObject]字典,直到我遇到无法将生成的AnyObject向下转换为Swift字符串,这在技术上不是对象而是值类型.我可以通过它来实现和平,因为它似乎有意义,虽然如果有一种解决方法(除了恢复到我不想做的NSString对象),我想知道它.
上面的逻辑解决方案似乎是切换到使用[String: Any]字典,但这样做,即使使用基本的代码,我也发现了一个问题:
func abc() {
var dict : [String: Any] = [String: Any]()
if dict["success"] != nil {
...
}
}
Run Code Online (Sandbox Code Playgroud)
上面的第3行代码给出了错误:
'String'不能转换为'DictionaryIndex <String,Any>'.
现在我好像有一个字典,其中包含我怀疑我可以根据需要转发的类型,但是它的密钥似乎不再可以访问,据我所知,它的类型恰好是正确的类型(实际上,虽然它是一个字面意思,甚至错误都表明我传递了一个字符串).我错过了什么,因为我实际上想要实现的是具有多种类型的易于访问的值的字典,我可以在var/let正确的Swift类型中实际检索?
这里的问题似乎是你的用法Any.Dictionary有两个下标方法:
subscript (i: DictionaryIndex<Key, Value>) -> (Key, Value) { get }
subscript (key: Key) -> Value?
Run Code Online (Sandbox Code Playgroud)
编译器错误地假定您想要第一个,然后抱怨String您传入的内容无法转换为DictionaryIndex<Key, Value>.
要避免此问题,您可以:
强制它使用特定的下标访问器: if dict["success"] as Any? != nil ...
[String:AnyObject]相反,声明你的字典- 因为元组不是对象.从指南,
AnyObject可以表示任何类类型的实例.
Any除了函数类型之外,它们可以表示任何类型的实例.
如果您认为这是一个错误,您可能希望提交错误.
| 归档时间: |
|
| 查看次数: |
2432 次 |
| 最近记录: |