我试图动态生成一个谓词并在从 Xcode 的 beta 版本更新后得到一个编译错误。任何想法是什么问题。我尝试将 valueForKey 的结果转换为 CVarArgType,但没有成功。

import UIKit
import CoreData

class User: NSManagedObject {
    @NSManaged var a: String?
    @NSManaged var b: String?
}


var user = User() // This will probably crash, but good enough to reproduce compile error
var keys = ["a", "b"]

for key in keys {
    var predicate = NSPredicate(format: "%K == %@", key, user.valueForKey(key))
}

最佳答案

问题是 managedObject.valueForKey(key) 正在返回一个可选值。您将必须首先验证它是否正在返回一个值:

if let value = managedObject.valueForKey(key) {
    var predicate = NSPredicate(format: "%K == %@", key, value )
    predicates.append(predicate)
}

另一个问题是您试图将 AnyObject 作为参数传递。您还可以将 NSObject 的可选强制转换添加到 if-let 中,这应该可以修复您的编译器错误:
if let value = user.valueForKey(key) as? NSObject {
    var predicate = NSPredicate(format: "%K == %@", key, value)
}

关于swift - 键入 AnyObject?不符合协议(protocol) CVarArgType?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27584005/

10-12 14:45
查看更多