上下文类型"AnyObject"不能与字典文字一起使用 - 数据结构不一致

Gui*_*uig 3 json dictionary swift

我正在尝试在swift中设置一个简单的字典:

var dict = [
  "_id": "123",
  "profile": [
    "name": "me",
    "username": nil,
  ]
] as [String : Any]
Run Code Online (Sandbox Code Playgroud)

然而,失败了Contextual type 'AnyObject' cannot be used with dictionary literal.下面这个问题,我已经试过更换[String : Any][String : [String : Any]],但逻辑上失败,因为第一个值类型String,而不是[String : Any].

我只想拥有一些东西,它可以包含任何我可以表示为json的数据,而且我可以在稍后尝试访问它时保留一些东西.

ozg*_*gur 5

Swift是一种严格类型的语言,所以问题是当你添加nil到字典时,它将无法知道它的将是什么类型,所以它会抱怨说类型是模糊的.

您可以通过执行以下操作来指定键的类型和字典的值:

let profile: [String: AnyObject?] = ["name": "me", "username": nil]    
let dict = ["_id": "123", "profile": profile] as [String : Any]
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用init(dictionaryLiteral:)构造函数来创建字典:

let dict = [
  "_id": "123",
  "profile": Dictionary<String, AnyObject?>(dictionaryLiteral: ("name", "me"), ("username", nil))
] as [String : Any]
Run Code Online (Sandbox Code Playgroud)