假设下面的游乐场:
protocol MyProtocol
{
func MyFunc()
}
class MyBase : MyProtocol
{
func MyFunc()
{
}
}
class MyClass : MyBase, MyProtocol
{
}
我期待这个不编译,并且唠叨没有实现我的协议。但与其他语言不同,如果协议符合基类,Swift似乎认为它很好。
如何让MyClass强制覆盖我的方法?
我使用的是Swift 1.1,tia。
答案 0 :(得分:5)
您的代码绝对有效。 MyClass
继承自已符合MyBase
的{{1}},因此让子类也符合它是完全多余的。话虽这么说,你基本上是在寻找一个在Swift中并不存在的抽象函数,我认为你可以在this answer中得到最接近你想要的东西。所以在您的基类中,如果没有覆盖,则发出警告:
MyProtocol
根据问题评论中的建议,不同的方法可能更适合您尝试做的事情(例如composition或使用结构),但在不了解更多信息的情况下推荐不同的解决方案有点困难关于你想要实现的目标(而不仅仅是预期的解决方案)。如果您确实提供了其他详细信息,则可能会收到更合适的答案。