"String"类型的值不符合预期的字典值类型"AnyObject"

Jac*_*sky 29 swift

我在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

斯威夫特3

首先一个的StringSwift为结构和它符合AnyObject.

解决方案#1

Swift 3中的最佳解决方案是将Dictionary Value的类型更改AnyObjectAny(包括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)

斯威夫特2

这里的问题是你定义了你的字典的值,AnyObjectString在Swift中它不是一个对象,它是一个struct.

在此输入图像描述

编译器抱怨String,因为它是第一个错误,但是如果你删除它,它会给你一个错误,42又是一个Int然后a Struct.

在此输入图像描述

你会遇到同样的问题true(Bool - > Struct).

在此输入图像描述

您可以通过两种方式解决此问题:

基金会#1

如果你添加import Foundation然后Swift结构自动桥接到NSString(这是一个对象),编译器很高兴

在此输入图像描述

任何#2

更换AnyObjectAny.现在,您可以在字典中添加任何类型的值.

在此输入图像描述

注意事项

恕我直言,我们(Swift开发人员)应逐步停止依赖Objective-C桥接并使用第二种解决方案.

  • @appzYourLife这个行为改变了,还是我错过了什么?我试图做这样的事情时遇到错误,即使已经导入了Foundation:`let dict:[String:AnyObject] = ["hello":"world"]`.错误是`类型的值'字符串'不符合预期的字典值类型'AnyObject' (4认同)