我有以下代码
protocol JsonParseDescriptor {
//some required methods
func parsePrimitives() {
}
extension JsonParseDescriptor where Self: NSManagedObject {
func parsePrimitives() {
self.setValue(1, forKey: "id") //this throws an error in swift stating Ambiguous use of setValueForKey
self.setValue(1, forKey: "id") //this does not throw any compile-time error
}
}
任何想法为什么setValue:ForKey:导致此错误?有趣的是,setValue:ForKeyPath:不会导致此问题。我只是害怕使用后者,因为它导致任何副作用,并且除了setValue之外还有效:ForKey:有什么想法吗?
答案 0 :(得分:0)
这是导致错误的代码。
func create<U : NSManagedObject>(entityName : String, primaryKey : String, value : AnyObject) -> U {
let created : U = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext: providedContext) as! U
created.setValue(value, forKey: primaryKey)
return created
}
这是不创建它的代码:
func create<U : NSManagedObject>(entityName : String, primaryKey : String, value : AnyObject) -> U {
let created = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext: providedContext)
created.setValue(value, forKey: primaryKey)
return created as! U
}
我的猜测是编译器(或静态分析器)无法确定应该路由动态分派的位置。或许它只是一个错误。
无论哪种方式,我希望这种解决方法有所帮助。