我试图动态生成一个谓词并在从 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/