- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Swift 中使用字典,它需要保存不同类型的值,尽管键几乎都是字符串。这在 Objective-C 中非常容易,但 Swift 通常非常有用的类型安全似乎使这变得更加困难。
我一直在使用 [String: AnyObject] 字典,直到遇到无法将生成的 AnyObject 向下转换为 Swift 字符串的问题,从技术上讲,它不是对象而是值类型。我可以接受它,因为它似乎有道理,尽管如果有办法解决它(除了恢复到我不想做的 NSString 对象),我想知道它。
上面的逻辑解决方案似乎是切换到使用 [String: Any]
字典,但在这样做的过程中,即使是一段基本的代码,我也发现了一个问题:
func abc() {
var dict : [String: Any] = [String: Any]()
if dict["success"] != nil {
...
}
}
上面第3行代码报错:
'String' is not convertible to 'DictionaryIndex<String, Any>'.
现在我似乎有一个字典,其中包含我怀疑我可以根据需要进行向下转换的类型,但它似乎不再可以通过它的键访问,据我所知,它是完全正确的类型(事实上,虽然它是文字,但即使是错误也表明我正在传递一个字符串)。考虑到我实际上想要实现的是具有多种类型的易于访问的值的字典,我实际上缺少什么,我实际上可以在正确的 Swift 类型的 var/let 中检索这些值?
最佳答案
这里的问题似乎是您对 Any
的使用. Dictionary
有两种下标方法:
subscript (i: DictionaryIndex<Key, Value>) -> (Key, Value) { get }
subscript (key: Key) -> Value?
编译器错误地假设你想要第一个,然后提示 String
您传入的无法转换为 DictionaryIndex<Key, Value>
.
要避免此问题,您可以:
强制它使用特定的下标访问器:if dict["success"] as Any? != nil ...
声明你的字典为[String:AnyObject]
相反——因为元组不是对象。来自 the guide ,
AnyObject
can represent an instance of any class type.
Any
can represent an instance of any type at all, apart from function types.
如果您认为这是一个错误,您不妨 file a bug .
关于dictionary - 字符串不可转换为 DictionaryIndex<String, Any>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272862/
我在 Swift 中使用字典,它需要保存不同类型的值,尽管键几乎都是字符串。这在 Objective-C 中非常容易,但 Swift 通常非常有用的类型安全似乎使这变得更加困难。 我一直在使用 [St
我有一个循环遍历包含字符串或字典的数组并为类型为 [String:AnyObject] 的新字典设置值的函数,使用原始数组中的值作为键。 sections是一组自定义 Section对象及其方法 ge
我正在尝试转换这段 ojb-c 代码: MPMovieFinishReason finishReason = [notification.userInfo[MPMoviePlayerPlaybackD
根据 Dictionary 上的标题文档在 Swift 中: A hash-based mapping from Key to Value instances. Also a collection o
大家好,我有大麻烦了。这是我的代码: let listOfQuestionsAndAnswers = ["Who’s Paul?": "An American", "Who’s Joao?": "A
我正致力于从 Objective-C 教程转换此委托(delegate)协议(protocol)函数,但在尝试通过使用下标返回基于键的值来访问字典中的值时遇到错误。我不太确定这里的错误是什么意思。任何
我尝试将一些 objective-c 代码重写为 swift。现在我得到一个非常奇怪的错误。我在 playgroud 中尝试了代码,完全没有受到其他代码的影响。 这是我要翻译的部分: NSDictio
当我从 Xcode 6 beta 4 切换到 beta 5 时,我在引用我的 plays 变量时遇到此错误(Int 不可转换为“DictionaryIndex”)。我不知道如何解决这个问题。 这是代码
我正在尝试制作一个非常简单的字典,将字符串映射到 Swift 中的字符串数组。代码如下所示: class FirstViewController: UIViewController { var
我是一名优秀的程序员,十分优秀!