斯威夫特 3
首先,Swift 中的String 是一个结构,并且不符合AnyObject。
解决方案 #1
Swift 3 中最好的解决方案是将 Dictionary Value 的类型从 AnyObject 更改为 Any(其中包括 String 结构)。
let joeSmith : [String : Any] = ["Name" : "Joe Smith", "Height" : 42, "Soccer Expo" : true, "Guardian" : "Jim and Jan Smith"]
解决方案 #2
但是,如果您真的想保留 Dictionary 定义为 AnyObject 的值,您可以强制从 String 结构到 NSString 类添加 as AnyObject 的桥接,如下所示(我对其他值)
let joeSmith : [String : AnyObject] = [
"Name" : "Joe Smith" as AnyObject,
"Height" : 42 as AnyObject,
"Soccer Expo" : true as AnyObject,
"Guardian" : "Jim and Jan Smith" as AnyObject]
斯威夫特 2
这里的问题是您将字典的值定义为AnyObject,而在Swift 中String 是不是对象,它是struct。
编译器抱怨 String 因为是第一个错误,但如果你删除它,它会给你一个错误 42 再次是一个 Int 然后是一个 Struct。
true (Bool -> Struct) 也会有同样的问题。
你可以通过两种方式解决这个问题:
基础#1
如果添加 import Foundation,那么 Swift 结构会自动桥接到 NSString(这是一个对象)并且编译器很高兴
任何 #2
您将AnyObject 替换为Any。现在您可以在字典中输入任何类型的值。
注意事项
恕我直言,我们(Swift 开发人员)应该逐渐停止依赖 Objective-C 桥接并使用第二种解决方案。