无法转换'AnyObject'类型的值?到期望的参数类型'[AnyObject]!

时间:2015-10-28 15:35:34

标签: json swift types casting anyobject

我正在使用swift lib "Sync" from Hyperoslo将JSON用户转换为Core Data对象。

let user = JSON.valueForKey("user")
Sync.changes(user , inEntityNamed: "User", dataStack: DataManager.manager, completion: { (response ) -> Void in
    print("USER \(response)")
})

但是当使用我的JSON对象设置此方法的第一个参数时,我有预编译错误:

  

无法转换'AnyObject'类型的值?预期的参数类型   '[AnyObject]!

如果用...替换我的第一行

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

...应用程序因此错误而崩溃:

  

无法将类型'__NSCFDictionary'(0x3884d7c8)的值转换为   'NSArray'(0x3884d548)。

如何处理?

已解决感谢@ Eric.D

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

2 个答案:

答案 0 :(得分:3)

changes()的第一个参数应该是隐式解包的AnyObject 数组,如下所示:

  

https://github.com/hyperoslo/Sync#swift

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

解决方案:安全解开user然后将其放入[AnyObject]数组中,然后在changes()中使用它。

答案 1 :(得分:1)

首先,user是一个可选的AnyObject。您永远不会期望您可以使用任何非可选项的可选项。通常你会使用"如果让"检查是否有可选项。

但实际上,你想在你的数据库中放一个AnyObject吗?这是在惹麻烦。首先检查它是否具有正确的类型。