一尘不染

扩展中的快速覆盖功能

swift

如果我上课:

class Spaceship<FuelType> {
    function prepareForLiftoff() throws {
        //Start the countdown!
    }
}

我最初以为我可以prepareForLiftoff通过添加扩展名来覆盖子类而无需子类化:

extension Spaceship where FuelType: CollectionType {
    func prepareForLiftoff() throws {}
}

该代码不会编译,但错误说明invalid redeclaration了该函数,这很有意义。

我的问题是: 是否仍要重写特定类的功能?换句话说,在某些情况下,例如上面的示例中,我可以替换功能吗FuelType: CollectionType?如果没有,是否有其他解决方法或方法来实现该行为(可能声明了另一个协议,idk)

现在,我考虑得更多了,我不得不说这是不可能的,因为是什么阻止某人重写任何标准库函数?


阅读 203

收藏
2020-07-07

共1个答案

一尘不染

文档中

扩展可以为类型添加新功能,但不能覆盖现有功能。

该文档仔细,准确地列出了允许扩展的功能。

关于你的问题:

无论如何有重写特定类的功能

是的,这称为子类化。

2020-07-07