Swift 协议(protocol)在基类中存在时允许未实现的函数

标签 swift

假设下面的 Playground :

protocol MyProtocol
{
    func MyFunc()
}

class MyBase : MyProtocol
{
    func MyFunc()
    {

    }
}

class MyClass : MyBase, MyProtocol
{

}

我原以为它不会编译,并且唠叨着没有实现我的协议(protocol)。但与其他语言不同,Swift 似乎认为协议(protocol)符合基类就可以了。

如何让 MyClass 强制覆盖我的方法?

我正在使用 Swift 1.1,tia。

最佳答案

您的代码绝对有效。 MyClass 继承自已经符合 MyProtocolMyBase,因此让子类也符合它是完全多余的。话虽这么说,你基本上是在寻找一个在 Swift 中并不真正存在的抽象函数,我认为你最接近实现你想要的是在 this answer 中推荐的。 .所以在你的基类中,如果没有被覆盖,就给出一个警告:

class MyBase : MyProtocol {
    func MyFunc() {
        fatalError("This method must be overridden") 
    }
}

正如问题评论中所建议的那样,不同的方法可能更适合您尝试做的事情(例如 composition 或使用结构),但是在不了解更多信息的情况下推荐不同的解决方案有点困难您正在努力实现(而不仅仅是预期的解决方案)。如果您确实提供了更多详细信息,您可能会收到更合适的答案。

关于Swift 协议(protocol)在基类中存在时允许未实现的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29539534/

相关文章:

ios - AVA录音机!我需要从 0 到 120 的幅度范围内获得分贝值 ios swift?

ios - 如何在 Swift 中以编程方式从另一个图像中剪切 Logo (png 图像)的形状?

swift - 使用需要泛型的方法扩展 Swift 类型

swift - 将选择器 View 返回到先前选择的行

ios - 缺少约束 IOS 11 swift 4

swift - 如何在不使用 UIView 的情况下快速向标签添加阴影和圆角?

ios - Swift:removefromSuperview 移除约束

swift - 在/Users/Shared/- 使用 Swift 创建一个目录

arrays - filter(_ :). first 和 first(where :)?

ios - 如何在 TableView 中显示 Firebase 数据?