首页 > 解决方案 > 苹果在 Swift 中的方式而不是覆盖?

问题描述

Apple 在 Swift 中使用什么方法而不是覆盖,我如何在不使用 @objc 标记的情况下编写它

import Foundation

class A {
    init() {}
}
extension A {
    @objc func foo() {
        print("foo")
    }
}

class B: A {
    override func foo() {
        print("yes2")
    }
}

A().foo()
B().foo()

也许协议?但如何?

标签: swift

解决方案


您可以定义协议并提供默认方法实现。那么你所需要的就是遵守该协议并在必要时提供它自己的 foo 方法:

protocol Fooable {
    func foo()
}

extension Fooable {
    func foo() {
        print("default implementation")
    }
}

class A: Fooable { }

class B: A {
    func foo() {
        print("B implementationn")
    }
}

let a = A()
let b = B()

a.foo()
b.foo() 

这将打印

默认实现

B 实现


推荐阅读