最佳答案
我有一个协议 P 返回一个对象的副本:
protocol P {
func copy() -> Self
}
以及实现 P 的 C 类:
class C : P {
func copy() -> Self {
return C()
}
}
但是,如果我将返回值设置为 Self
,就会得到以下错误:
无法将类型为‘ C’的返回表达式转换为返回类型为‘ Self’的返回表达式
我也试过返回 C
。
class C : P {
func copy() -> C {
return C()
}
}
这导致了以下错误:
非最终类‘ C’中的方法‘ copy ()’必须返回
Self
才能符合 执行 P 协议
除了我在 class C
前面加上 final
的情况外,没有其他方法可行:
final class C : P {
func copy() -> C {
return C()
}
}
然而,如果我想要子类 C,那么没有什么可以工作。有什么办法可以解决这个问题吗?