假设下面的 Playground :
protocol MyProtocol
{
func MyFunc()
}
class MyBase : MyProtocol
{
func MyFunc()
{
}
}
class MyClass : MyBase, MyProtocol
{
}
我原以为它不会编译,并且唠叨着没有实现我的协议(protocol)。但与其他语言不同,Swift 似乎认为协议(protocol)符合基类就可以了。
如何让 MyClass 强制覆盖我的方法?
我正在使用 Swift 1.1,tia。
最佳答案
您的代码绝对有效。 MyClass
继承自已经符合 MyProtocol
的 MyBase
,因此让子类也符合它是完全多余的。话虽这么说,你基本上是在寻找一个在 Swift 中并不真正存在的抽象函数,我认为你最接近实现你想要的是在 this answer 中推荐的。 .所以在你的基类中,如果没有被覆盖,就给出一个警告:
class MyBase : MyProtocol {
func MyFunc() {
fatalError("This method must be overridden")
}
}
正如问题评论中所建议的那样,不同的方法可能更适合您尝试做的事情(例如 composition 或使用结构),但是在不了解更多信息的情况下推荐不同的解决方案有点困难您正在努力实现(而不仅仅是预期的解决方案)。如果您确实提供了更多详细信息,您可能会收到更合适的答案。
关于Swift 协议(protocol)在基类中存在时允许未实现的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29539534/