dictionary - 类型 '[String, AnyObject?]' 不符合 AnyObject 协议(protocol)? : why?

标签 dictionary swift compiler-errors nsdictionary literals

我试图理解为什么我有一个编译错误:Type '[String, AnyObject?]' does not conform to protocol AnyObject?

var cars: [String: AnyObject?] = [ "model": "Ferrari"]
var JSON: [String: AnyObject?] = [ "cars": cars ]  // <-- error

cars 似乎不是 AnyObject?我不明白。

感谢您的帮助!

最佳答案

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

The Swift Programming Language: Type Casting

AnyObject can represent an instance of any class type.

The Swift Programming Language: Classes and Structures

Swift’s String, Array, and Dictionary types are implemented as structures.


您可以为此目的使用Any?

var cars: [String: Any?] = [ "model": "Ferrari"]
var JSON: [String: Any?] = [ "cars": cars ]

仔细研究之后,有一个微妙的问题导致它崩溃。

这是一个有效的示例:

var cars: [String: AnyObject] = [ "model": "Ferrari"]
var JSON: [String: AnyObject] = [ "cars": cars ]

之所以有效,是因为 cars 被从 [String: AnyObject] 强制(隐式转换)为与 NSDictionary ([AnyHashable: AnyObject])。这个 NSDictionary 兼容对象然后被转换为 AnyObject。所以,魔法。

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

关于dictionary - 类型 '[String, AnyObject?]' 不符合 AnyObject 协议(protocol)? : why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25997376/

相关文章:

python - 在 Python 中——一种选择要迭代哪个字典(并操作其中的值)的方法

java - 如何打开 List<Map>,按 Map 键分组并按 Map 值缩减

swift - 在不同的文件中使用自定义运算符

swift - 在 Swift 中,如何获取 `Any` 变量的真实大小?

C++ 在 Unicode Release MinDependency 中编译错误,但在 Debug 中没有

C 中指针变量的冲突类型(错误)

ruby-on-rails - 在 Ruby 中使用 max_by 查找哈希中最大数字的键

python - 将 Python 字典转换为类 C 结构

ios - 如何使所有文本字段在返回时关闭键盘?

c++ - 使用一组学生及其各自的 GPA 对 GPA 进行各种计算