无法将类型 'AnyObject?' 的值转换为预期的参数类型 '[AnyObject]!
Cannot convert value of type 'AnyObject?' to expected argument type '[AnyObject]!
我正在使用 swift 库 "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 对象设置此方法的第一个参数时,出现预编译器错误:
Cannot convert value of type 'AnyObject?' to expected argument type
'[AnyObject]!'
如果将我的第一行替换为...
let user = JSON.valueForKey("user") as! [AnyObject]
...应用程序崩溃并出现此错误:
Could not cast value of type '__NSCFDictionary' (0x3884d7c8) to
'NSArray' (0x3884d548).
如何处理?
已解决感谢@Eric.D
的解释
let user = [JSON.valueForKey("user")!]
首先,用户是一个可选的 AnyObject。你可以永远不会期望你可以在需要任何非可选的地方使用可选的。通常,您将使用 "if let" 来检查可选项是否存在。
但实际上,您想将 AnyObject 放入您的数据库中吗?这是自讨苦吃。首先检查它是否具有正确的类型。
changes()
的第一个参数应该是 隐式解包的 AnyObject 数组,如此处指定:
但是您的对象 user
是一个可选的 AnyObject。
解决方案:安全解包 user
然后将其放入 [AnyObject]
数组中,然后再在 changes()
.
中使用它
我正在使用 swift 库 "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 对象设置此方法的第一个参数时,出现预编译器错误:
Cannot convert value of type 'AnyObject?' to expected argument type '[AnyObject]!'
如果将我的第一行替换为...
let user = JSON.valueForKey("user") as! [AnyObject]
...应用程序崩溃并出现此错误:
Could not cast value of type '__NSCFDictionary' (0x3884d7c8) to 'NSArray' (0x3884d548).
如何处理?
已解决感谢@Eric.D
的解释let user = [JSON.valueForKey("user")!]
首先,用户是一个可选的 AnyObject。你可以永远不会期望你可以在需要任何非可选的地方使用可选的。通常,您将使用 "if let" 来检查可选项是否存在。
但实际上,您想将 AnyObject 放入您的数据库中吗?这是自讨苦吃。首先检查它是否具有正确的类型。
changes()
的第一个参数应该是 隐式解包的 AnyObject 数组,如此处指定:
但是您的对象 user
是一个可选的 AnyObject。
解决方案:安全解包 user
然后将其放入 [AnyObject]
数组中,然后再在 changes()
.