"不能指定'String'类型的值来键入'AnyObject?'",Swift 3,Xcode 8 beta 6

xin*_*nil 30 swift

一段相当简单的代码

var dict: [String: AnyObject] = [:]
dict["key"] = "value"
Run Code Online (Sandbox Code Playgroud)

生成以下编译时错误

Cannot assign value of type 'String' to type 'AnyObject?'
Run Code Online (Sandbox Code Playgroud)

简单的类型检查告诉我那StringAnyObject

"value" is AnyObject // returns true
Run Code Online (Sandbox Code Playgroud)

我可以改变AnyObjectAny,一切都将工作

var dict: [String: Any] = [:]
dict["key"] = "value"
Run Code Online (Sandbox Code Playgroud)

但我想明白为什么我会收到错误?是否String不再AnyObject?或者这是一个错误?

Rob*_*ier 37

在b6中,String不再神奇地与NSString桥接.字符串不是一个类; 这是一个结构.你需要手工做桥接:

dict["key"] = "value" as AnyObject
Run Code Online (Sandbox Code Playgroud)

is仍然似乎是桥接的事实可能是一个错误,应该报告.

不言而喻[String: AnyObject],[String: Any]应该尽可能少地使用代码.

(请务必遵循以下评论中Hamish提供的链接.)

  • [根据Joe Groff](https://bugs.swift.org/browse/SR-2420?focusedCommentId=17394&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-17394),`是/因为AnyObject`应该总是成功,因为现在所有东西都连接到`AnyObject`.我相信这是因为因为`id`现在被桥接到Swift作为'Any`,`Any`现在可以桥接到`AnyObject`(奇怪,我知道). (2认同)