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

时间:2016-08-30 05:38:19

标签: json swift dictionary

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

var dict = [
  "_id": "123",
  "profile": [
    "name": "me",
    "username": nil,
  ]
] as [String : Any]

然而,Contextual type 'AnyObject' cannot be used with dictionary literal失败了。在this question之后,我尝试将[String : Any]替换为[String : [String : Any]],但这在逻辑上失败了,因为第一个值的类型为String而不是[String : Any]

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

2 个答案:

答案 0 :(得分:5)

Swift是一种严格类型的语言,因此问题在于,当您将nil添加到词典时,它无法知道其的类型所以它会抱怨说类型不明确。

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

let profile: [String: AnyObject?] = ["name": "me", "username": nil]    
let dict = ["_id": "123", "profile": profile] as [String : Any]

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

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

答案 1 :(得分:0)

或者,将它们拆分也可以:

let insideDict = [
    "name": "me",
    "username": nil,
  ]

var dict = [String : Any]()
dict["_id"] = "123"
dict["profile"] = insideDict