ios - 扩展中的 Swift 覆盖功能

标签 ios swift generics

如果我有一个类:

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

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

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

虽然这段代码无法编译,但错误显示函数的无效重新声明,这是有道理的。

我的问题是:有没有办法覆盖特定类的函数?换句话说,我可以在某些条件下替换功能,例如上面的示例,其中 FuelType: CollectionType。如果没有,是否有任何其他解决方法或方法来实现该行为(可能声明另一个协议(protocol),idk)

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

最佳答案

来自documentation :

Extensions can add new functionality to a type, but they cannot override existing functionality.

文档仔细而准确地列出了允许扩展执行的操作。

关于你的问题:

Is there anyway to override a function of a particular class

是的,这叫做子类化。

关于ios - 扩展中的 Swift 覆盖功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862414/

相关文章:

typescript - 如何使用基于泛型类型的条件类型来描述约束?

ios - 为什么 Swift 4 显示键盘时 stackview 会在 3 秒后消失?

ios - UIButton 不会调用@IBAction

ios - .h 中没有名为 'ReformerProtocol' 的类型或协议(protocol),但 .m 工作正常

c# - 在 C# 中重写泛型方法

java - 对于java,如何确保内部接口(interface)和外部接口(interface)具有相同的泛型?

ios - 使用平移手势识别器获得平滑旋转

ios - 我的 iPad 横向启动画面跳转到纵向

ios - 节点上的 Sprite Kit 相机

swift - Swift 和 Interface Builder 中的单例