我在Swift中创建字典时收到此错误:
"String"类型的值不符合预期的字典值类型"AnyObject"
码:
let joeSmith : [String : AnyObject] = ["Name" : "Joe Smith", "Height" : 42, "Soccer Expo" : true, "Guardian" : "Jim and Jan Smith"]
Run Code Online (Sandbox Code Playgroud)
Luc*_*tti 55
首先一个的String在Swift为结构和它不符合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"]
Run Code Online (Sandbox Code Playgroud)
解决方案#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]
Run Code Online (Sandbox Code Playgroud)
这里的问题是你定义了你的字典的值,AnyObject而String在Swift中它不是一个对象,它是一个struct.
编译器抱怨String,因为它是第一个错误,但是如果你删除它,它会给你一个错误,42又是一个Int然后a Struct.
你会遇到同样的问题true(Bool - > Struct).
您可以通过两种方式解决此问题:
基金会#1
如果你添加import Foundation然后Swift结构自动桥接到NSString(这是一个对象),编译器很高兴
任何#2
更换AnyObject用Any.现在,您可以在字典中添加任何类型的值.
注意事项
恕我直言,我们(Swift开发人员)应逐步停止依赖Objective-C桥接并使用第二种解决方案.
| 归档时间: |
|
| 查看次数: |
12837 次 |
| 最近记录: |