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,并且我确实想覆盖它。
那么我怎样才能使这个函数可重写呢?
编辑:
如果你想查看实际的代码,这里是要点
protocol MyDelegate {
func myDelegateMethod()
}
Run Code Online (Sandbox Code Playgroud)
这是一个extension到protocol. 通过给出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)
| 归档时间: |
|
| 查看次数: |
4813 次 |
| 最近记录: |