Swift同时将对象转换为类型和协议

时间:2016-08-16 15:38:54

标签: ios swift core-data swift3 swift-protocols

如何将给定对象强制转换为类型和协议,以便调用某些定义为扩展名的方法

例如:

extension Identifiable where Self: NSManagedObject, Self: JsonParseDescriptor {
    func someMethod() { }
}

现在我有一个从Core数据中检索到的对象,我想将它转换为上述协议,以便在其上调用someMethod。我可以使用protocol<Identifiable, JsonParseDescriptor>转换为协议,但是如何在其中包含NSManagedObejct类型呢?

由于

2 个答案:

答案 0 :(得分:3)

您正在寻找的内容称为具体的同类型要求。不幸的是,它在Swift中还不可能。

有关详细信息,请参阅票证SR-1009SR-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)

不再需要扩展和桥接协议。