协议扩展未使用最具体的实现

时间:2018-10-11 20:06:43

标签: swift generics

我有两个班,ObjectSubObject。协议MyProtocol的类型为associatedtype的{​​{1}}。在两个扩展中,我提供了Object函数的实现。当我使用任何一个类创建save的实例时,它们都会导致调用最不特定的扩展实现,而应该调用最特定的扩展实现。

TestClass

如何解决此问题,以便class Object {} class SubObject: Object {} protocol MyProtocol { associatedtype T: Object func save() } extension MyProtocol { func save() { print("Object") } } extension MyProtocol where T == SubObject { func save() { print("SubObject") } } class MyClass<T: Object>: MyProtocol { } class TestClass<T: Object> { typealias U = MyClass<T> func test() { let myClass = U() myClass.save() } } let testClass1 = TestClass<Object>() testClass1.test() // returns "Object" let testClass2 = TestClass<SubObject>() testClass2.test() // returns "Object" (should be "SubObject") 调用TestClass的正确实现?还是Swift目前无法做到这一点?任何帮助将不胜感激!

0 个答案:

没有答案