Json 无法转换类型为';任何对象?';到预期的参数类型';[任何对象]!

Json 无法转换类型为';任何对象?';到预期的参数类型';[任何对象]!,json,swift,types,casting,anyobject,Json,Swift,Types,Casting,Anyobject,我使用swift库将JSON用户转换为核心数据对象 let user = JSON.valueForKey("user") Sync.changes(user , inEntityNamed: "User", dataStack: DataManager.manager, completion: { (response ) -> Void in print("USER \(response)") }) 但是,当使用JSON对象设置此方法的第一个参数时,我出现了预编译器错误: 无法

我使用swift库将JSON用户转换为核心数据对象

let user = JSON.valueForKey("user")
Sync.changes(user , inEntityNamed: "User", dataStack: DataManager.manager, completion: { (response ) -> Void in
    print("USER \(response)")
})
但是,当使用JSON对象设置此方法的第一个参数时,我出现了预编译器错误:

无法将“AnyObject”类型的值转换为预期的参数类型 “[任何对象]!”

如果a将我的第一行替换为

let user = JSON.valueForKey("user") as! [AnyObject] 
…应用程序因以下错误而崩溃:

无法将类型为“\uu NSCFDictionary”(0x3884d7c8)的值强制转换为 “NSArray”(0x3884d548)

如何应对

解决了多亏了@Eric.D的解释

let user = [JSON.valueForKey("user")!]

首先,user是可选的AnyObject。在需要任何非可选内容的情况下,您决不能期望可以使用可选。通常,您将使用“if let”来检查是否存在可选项


但实际上,是否要在数据库中放置AnyObject?这是自找麻烦。首先检查它是否具有正确的类型

changes()的第一个参数应该是此处指定的任何对象的隐式展开数组:

但是您的对象
user
是可选的AnyObject


解决方案:安全地打开
用户
,然后将其放入
[AnyObject]
数组中,然后在
changes()

中使用它。用户是字典而不是数组,因此,如果您强制将其强制转换为非数组,则它将爆炸。如果让user=JSON.valueForKey(“用户”)作为?字典