我有两个班,Object
和SubObject
。协议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目前无法做到这一点?任何帮助将不胜感激!