在我的代码中,我为NSManagedObject
编写了以下扩展:
extension NSManagedObject {
convenience init(context: NSManagedObjectContext) {
let name = self.dynamicType.entityName()
let entity = NSEntityDescription.entityForName(name, inManagedObjectContext: context)!
self.init(entity: entity, insertIntoManagedObjectContext: context)
}
}
在Xcode 7 / iOS 9 SDK中,这个功能按预期工作。然而,在iOS 10 SDK中添加了一个具有相同签名的方法:
/* Returns a new object, inserted into managedObjectContext. This method is only legal to call on subclasses of NSManagedObject that represent a single entity in the model.
*/
@available(iOS 10.0, *)
public convenience init(context moc: NSManagedObjectContext)
这让编译器感到不满:Initializer 'init(context:)' with Objective-C selector 'initWithContext:' conflicts with previous declaration with the same Objective-C selector
现在,如果可用的话,我想在新的iOS 10中使用它,并在应用运行于iOS 9设备上继续使用我的扩展。
有没有一种好方法可以实现这一点,同时又限制对现有代码的更改?我想保留扩展中init
的签名。