Sal*_*han 8 core-data ios swift swift-protocols swift3
如何将给定对象强制转换为类型和协议,以便调用某些定义为扩展名的方法
例如:
extension Identifiable where Self: NSManagedObject, Self: JsonParseDescriptor {
func someMethod() { }
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个从Core数据中检索到的对象,我想将它转换为上述协议,以便在其上调用someMethod.我可以使用转换为协议protocol<Identifiable, JsonParseDescriptor>
,但是如何在其中包含NSManagedObejct类型呢?
谢谢
从Swift 4开始,现在可以直接进行上述转换,而无需使用棘手的解决方法。该任务的完成方式与我们完成协议组合的方式类似:
var myVar = otherVar as! (Type & Protocol)
Run Code Online (Sandbox Code Playgroud)
不再需要扩展和桥接协议。
您正在寻找的东西称为具体的同类型需求。不幸的是,这在 Swift 中还不可能。
有关详细信息,请参阅票证SR-1009和SR-1447。您还应该查看这个答案。
同时,您可以NSManagedObject
使用您需要的方法来扩展虚拟协议:
protocol _NSManagedObject {
//the methods you want
}
extension NSManagedObject: _NSManagedObject {}
extension Identifiable where Self: _NSManagedObject, Self: JsonParseDescriptor {
func someMethod() { }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1632 次 |
最近记录: |