inheritance - swift 从其基类返回子类

标签 inheritance swift

我试图让父类(super class)中的方法返回子类的实例,这样我就可以在父类和子类中使用方法链。

但是,当我尝试链接方法时出现错误“BaseClass 没有名为 someOtherChainableMethod 的成员”。这是我的代码:

class BaseClass {
    func someChainableMethod() -> BaseClass {
        return self
    }
}

class ChildClass: BaseClass {
    func someOtherChainableMethod() -> ChildClass {
        return self
    }
}

let childClass = ChildClass

childClass.someChainableMethod().someOtherChainableMethoid()

问题似乎是父级链式方法中的“return self”正在返回类型为 BaseClass 而不是 ChildClass 的实例。

我也用泛型尝试过这个但失败了,这是我尝试过的:

class BaseClass<T> {
    func someChainableMethod() -> T {
        return self
    }
}

class ChildClass: BaseClass<ChildClass> {
    func someOtherChainableMethod() -> ChildClass {
        return self
    }
}

let childClass = ChildClass

childClass.someChainableMethod().someOtherChainableMethoid()

在这种情况下,BaseClass someChainableMethod 方法的错误是“BaseClass 不可转换为 T”。

最佳答案

如果您将方法的返回类型更改为 Self,您的代码将有效:

class BaseClass {
    func someChainableMethod() -> Self {
        return self
    }
}

class ChildClass: BaseClass {
    func someOtherChainableMethod() -> Self {
        return self
    }
}

let childClass = ChildClass()
let foo = childClass.someChainableMethod().someOtherChainableMethod()

关于inheritance - swift 从其基类返回子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26296938/

相关文章:

javascript - Javascript 中的继承

ios - 如何将 UInt8 数组转换为 Data? ( swift )

Xcode 未正确重命名应用程序

ios - NSPredicate 用于一对一关系

swift - 错误 : Cannot convert value of type

python - 我可以从 python 类中删除继承的嵌套类吗?

C++ 运算符继承重载

java - Java8中带注解的继承

C++继承子类可修改变量

ios - 使用像发布其他数据一样的常规方式将数据上传到 Alamofire