swift - 苹果在 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()
也许协议?但如何?
解决方案
您可以定义协议并提供默认方法实现。那么你所需要的就是遵守该协议并在必要时提供它自己的 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 实现
推荐阅读
- postgresql - 如何在我的 postgres 图像中更正 set work_mem amd max_wal_size
- sql - 将表的选定列转换为 SQL Server 中的行,并将列标题保留为值
- angular - 预期的间谍
被调用一次。被调用 0 次 - javascript - 如何在 React 中对对象数组进行有条件的 reduce 调用?
- c# - C# ComboBox 显示名称并使用 id 作为值?
- azure-iot-hub - 突然的连接问题
- android - Room 的 `onDelete = CASCADE` 在迁移期间不起作用
- listview - 在 Horizontal ListView 的子项中创建一个水平 List View
- css - 如何为换行和换行设置不同的填充?
- sql - 在sql server中搜索韩语值