首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键入'[String,AnyObject?]‘不符合AnyObject协议?:为什么?

键入'[String,AnyObject?]‘不符合AnyObject协议?:为什么?
EN

Stack Overflow用户
提问于 2014-09-23 14:13:44
回答 2查看 22.3K关注 0票数 15

我试图理解为什么我有一个编译错误:类型'String,AnyObject?‘不符合AnyObject?协议

代码语言:javascript
复制
var cars: [String: AnyObject?] = [ "model": "Ferrari"]
var JSON: [String: AnyObject?] = [ "cars": cars ]  // <-- error

看起来cars不是AnyObject吗?但我不明白。

谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-23 14:22:13

AnyObject必须是一个类,但Dictionary是一个结构。

快速编程语言:类型转换

AnyObject可以表示任何类类型的实例。

Swift编程语言:类与结构

Swift的字符串、数组和字典类型作为结构实现。

为此,您可以使用Any?

代码语言:javascript
复制
var cars: [String: Any?] = [ "model": "Ferrari"]
var JSON: [String: Any?] = [ "cars": cars ]

再看一看,有一个微妙的问题导致了这个问题的破裂。

下面是一个有效的示例:

代码语言:javascript
复制
var cars: [String: AnyObject] = [ "model": "Ferrari"]
var JSON: [String: AnyObject] = [ "cars": cars ]

这是因为cars被胁迫(隐式转换)从[String: AnyObject]到与NSDictionary ([AnyHashable: AnyObject])兼容的对象。然后将此NSDictionary兼容对象转换为AnyObject。所以魔法。

[String: AnyObject?]不能以这种方式进行强制转换,因为它不兼容NSDictionary,因此强制失败。

票数 24
EN

Stack Overflow用户

发布于 2014-09-23 14:56:07

汽车似乎不是AnyObject?

您将cars定义为[String: AnyObject?]类型,因此,以下代码是有效的(在游乐场中进行了测试):

代码语言:javascript
复制
var cars: [String: AnyObject?] = [ "model": "Ferrari"]
var JSON: [String: [String: AnyObject?]] = [ "cars": cars ]

您应该将JSON定义为[String: AnyObject?][String: Any?]类型(根据您的需要),前提是您无法猜出cars的类型(请参阅Swift编程语言中的Any和AnyObject的类型铸造 )。

这会影响我的对象向NSDictionary的投射吗?

NSDictionary不能容纳nil (参见这里这里)。以下代码给出了游乐场中的错误消息:

代码语言:javascript
复制
var nsDict1: NSDictionary = [12 : 10, 10 : nil] //eror message

var cars: [String: AnyObject?] = [ "model" : nil]
var JSON: [String: [String: AnyObject?]] = [ "cars" : cars ]
let nsDict2 = JSON as NSDictionary //error message

然而,下列代码是有效的:

代码语言:javascript
复制
var nsDict1: NSDictionary = [12 : 10, 10 : NSNull()] //no error message

var cars: [String: AnyObject] = [ "model" : "Ferrari"] //also works with [ "model" : NSNull()]
var JSON: [String: [String: AnyObject]] = [ "cars" : cars ]

let nsDict2 = JSON as NSDictionary //no error message
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25997376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档