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

eri*_*osg 0 swift

假设下面的操场:

protocol MyProtocol
{
    func MyFunc()
}

class MyBase : MyProtocol
{
    func MyFunc()
    {

    }
}

class MyClass : MyBase, MyProtocol
{

}
Run Code Online (Sandbox Code Playgroud)

我期待这不能编译,并唠叨不实现我的协议.但与其他语言不同,如果协议符合基类,Swift似乎认为它很好.

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

我正在使用Swift 1.1,tia.

Fir*_*iro 5

您的代码绝对有效.MyClass继承MyBase已经符合的MyProtocol,所以让子类也符合它是完全多余的.话虽这么说,你基本上是在寻找一个在Swift中并不存在的抽象函数,我认为你可以在这个答案中得到你想要的最接近的函数.所以在您的基类中,如果没有覆盖,只需发出警告:

class MyBase : MyProtocol {
    func MyFunc() {
        fatalError("This method must be overridden") 
    }
}
Run Code Online (Sandbox Code Playgroud)

正如问题评论中所建议的那样,不同的方法可能更适合您尝试做的事情(例如,组合或使用结构),但是如果不了解更多关于您要实现的内容的话,有点难以推荐不同的解决方案(而不仅仅是预期的解决方案).如果您确实提供了其他详细信息,则可能会收到更合适的答案.