如何将给定对象强制转换为类型和协议,以便调用某些定义为扩展名的方法
例如:
extension Identifiable where Self: NSManagedObject, Self: JsonParseDescriptor {
func someMethod() { }
}
现在我有一个从Core数据中检索到的对象,我想将它转换为上述协议,以便在其上调用someMethod。我可以使用protocol<Identifiable, JsonParseDescriptor>
转换为协议,但是如何在其中包含NSManagedObejct类型呢?
由于
答案 0 :(得分:3)
您正在寻找的内容称为具体的同类型要求。不幸的是,它在Swift中还不可能。
有关详细信息,请参阅票证SR-1009和SR-1447。您还应该结帐this answer.
同时,您可以使用您需要的方法使用虚拟协议扩展NSManagedObject
:
protocol _NSManagedObject {
//the methods you want
}
extension NSManagedObject: _NSManagedObject {}
extension Identifiable where Self: _NSManagedObject, Self: JsonParseDescriptor {
func someMethod() { }
}
答案 1 :(得分:3)
从 Swift 4 开始,现在可以直接制作提到的演员而无需棘手的解决方法。任务的完成与协议组成类似:
var myVar = otherVar as! (Type & Protocol)
不再需要扩展和桥接协议。