在 Swift 中使自定义类中的委托方法可重写

hkl*_*lel 1 delegates ios swift

所以我有一个自定义类,并为其定义了一个委托方法。这是一个简化的示例:

protocol MyDelegate {
    func myDelegateMethod()
}

class Myclass (){
    //other stuff
    func myDelegateMethod(){
        //some operation
    }
}
Run Code Online (Sandbox Code Playgroud)

我想从另一个类重写这个方法。我用了

override func myDelegateMethod(){
}
Run Code Online (Sandbox Code Playgroud)

但我收到了这个错误

方法不会覆盖其超类中的任何方法

我明白这是说超类没有实现这个方法,所以我不需要使用关键字override。但就我而言,我确实myDelegateMethod在超级类中MyClass,并且我确实想覆盖它。

那么我怎样才能使这个函数可重写呢?

编辑:

如果你想查看实际的代码,这里是要点

R M*_*nke 5

protocol MyDelegate {
    func myDelegateMethod()
}
Run Code Online (Sandbox Code Playgroud)

这是一个extensionprotocol. 通过给出func和 空,block它现在是一个optional func。您可以在函数中添加一些内容并将其设为默认实现。

extension MyDelegate {

    func myDelegateMethod() { } // just a default

}
Run Code Online (Sandbox Code Playgroud)

现在可以编译:

class Myclass : MyDelegate {

}
Run Code Online (Sandbox Code Playgroud)

这是一个没有继承或一致性的类。它有一个与委托同名的方法,但两者完全无关。这很令人困惑。

class Myclass {
    //other stuff
    func myDelegateMethod() {
        //some operation
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个符合协议的类,override不需要。

class Myclass : MyDelegate {
    //other stuff
    func myDelegateMethod(){
        //some operation
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个子类,override如果您希望函数具有不同的主体,则需要它。

class MySubClass : Myclass {

    override func myDelegateMethod() {
        // you're not my supervisor
    }   
}
Run Code Online (Sandbox Code Playgroud)