Swift 3类型'Any'的值没有成员'valueForKey'

时间:2016-09-15 07:13:17

标签: core-data nsmanagedobject swift3 xcode8 any

我正在使用Xcode 8中的Swift 3.0编写一个带有Core Data的测试程序。问题是当我尝试从NSManagedObject接收任何数据时这样:

if let a = i.valueForKey("b") as? String {

if let a = (i as AnyObject).value("b") as? String {

标有错误

  

“Any”类型的值没有成员'valueForKey'

所以问题是如何从类型中获取任何单个记录数据? 附:如果可能的话,不转换为AnyObject类型,因为它导致了这个

    do {
    let entityTableInCoreData = try newPrivateQueueContext.fetch(request)
    for i in entityTableInCoreData {
        print("Record")
        //print(i)
        if let a = i as? NSManagedObject {
            print("a: \(a.value(forKey: "a"))")
        }
    }

} catch {
}

也有错误:

  

无法使用类型为'(String)'

的参数列表调用'value'

我想以适当的方式做到这一点。 谢谢!

更新

我找到了解决方案(感谢Vadian),但我怀疑它是正确的:

Server.MapPath

我仍在寻找正确的方法来做到这一点。

1 个答案:

答案 0 :(得分:3)

fetch返回[Any]。您需要将类型向下转换为实际类型,在本例中为[NSManagedObject]

let entityTableInCoreData = try newPrivateQueueContext.fetch(request) as! [NSManagedObject]

强制向下转发是安全的,因为根据获取请求,它保证返回类型为NSManagedObject