我有一个协议P,它返回一个对象的副本:
protocol P {
func copy() -> Self
}
Run Code Online (Sandbox Code Playgroud)
以及实现P的C类:
class C : P {
func copy() -> Self {
return C()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我是否输入返回值,因为Self我得到以下错误:
无法将类型为"C"的返回表达式转换为返回类型"Self"
我也试过回来了C.
class C : P {
func copy() -> C {
return C()
}
}
Run Code Online (Sandbox Code Playgroud)
这导致以下错误:
非终结类'C'中的方法'copy()'必须返回
Self以符合协议'P'
没有什么可行的,除了我前缀class C为finalie 的情况:
final class C : P {
func copy() -> C {
return C()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想继承C,那么什么都行不通.有没有办法解决?
我想对某个类进行扩展以返回运行时类型对象
例如,我创建了A类的扩展
extension A {
class func niceObject() -> XXXXX { // in objective-c is instancetype
return ....
}
}
Run Code Online (Sandbox Code Playgroud)
所以任何人都知道Swift中有instancetype关键字或者不替换xxxxx,我可以在A的子类上调用此函数而无需手动转换
var b: B = B.niceObject()
Run Code Online (Sandbox Code Playgroud)
谢谢