Ios Swift-返回超类的重写函数中的子类类型

Ios Swift-返回超类的重写函数中的子类类型,ios,swift,Ios,Swift,我正在尝试在swift中实现一个可链接的对象设计。这是我的结构: class A{ func get() -> some A{ return self } } class B:A{ func set(){ } } 我能创建一个即使创建原始类的子类也能工作的方法吗?在我的示例中,如果我在B上调用get,我将得到一个类型为A的对象,该对象没有名为set的方法 因此,为了实现这一点,我必须手动重写A中的每个函数,这不是最糟糕的,因为我可以调用

我正在尝试在swift中实现一个可链接的对象设计。这是我的结构:

class A{
    func get() -> some A{
        return self
    }
}

class B:A{
    func set(){

    }
}
我能创建一个即使创建原始类的子类也能工作的方法吗?在我的示例中,如果我在B上调用get,我将得到一个类型为A的对象,该对象没有名为set的方法


因此,为了实现这一点,我必须手动重写A中的每个函数,这不是最糟糕的,因为我可以调用super,但仍然会浪费时间和重复代码。

如果您真的不需要使用不透明类型和某个关键字,您可以使用协议和扩展获得所需的:

协议可链接{ func get->Self } 可扩展链表{ func get->Self{ 回归自我 } } A类:可链接{} B类:A{ func集{ 印度教 } } 现在,您可以为get函数获得所需的返回类型:

设a=a a、 get//Type=a 设b=b b、 get//Type=b b、 get.set//打印“ok” 如果您不需要在多个类层次结构中重复使用此功能,那么由于@Joakim Danielson指出了这一点,解决方案会更加简单:

甲级{ func get->Self{ 回归自我 } } B类:A{ func集{ 印度教 } }
您也可以不使用该协议,并在
let b = B()
b.get().set() // A has no member 'set'