swift - 使用 Swift 协议和扩展覆盖对象方法
问题描述
我想覆盖在框架中声明并在扩展中实现的方法。
这是我尝试过的:
import UIKit
// Code from a dependency
class Object { // UIViewController
func printSomething() {
print("something")
}
}
// My code
protocol SayHelloProtocol {
func hello()
func name() -> String
}
extension SayHelloProtocol {
func hello() {
print("Hello " + name())
}
func name() -> String {
"someone"
}
}
class MyHelloObject: Object, SayHelloProtocol {
override func printSomething() {
hello()
}
}
class MyHelloChildObject: MyHelloObject {
func name() -> String {
"You"
}
}
MyHelloObject().printSomething()
MyHelloChildObject().printSomething()
这将打印:
Hello someone
Hello someone
但我想覆盖该方法,以便打印:
Hello someone
Hello You
是否可以覆盖在扩展中实现的方法?
解决方案
如果您将该name()
功能也添加到MyHelloObject
:
class MyHelloObject: Object, SayHelloProtocol {
override func printSomething() {
hello()
}
func name() -> String {
"Someone"
}
}
class MyHelloChildObject: MyHelloObject {
override func name() -> String {
"You"
}
}
推荐阅读
- java - 我正在尝试质疑正则表达式匹配
- flutter - 为 Lottie 动画设置 BoxFit Cover
- postgresql - 在 PostgreSQL 11.0 中将列类型从“字符变化”更改为“日期”
- python - 使用python在对数网格上卷积一维信号
- reactjs - 在 React 中单击时元素的样式不会改变
- reactjs - useEffect 清理/内存泄漏
- firebase - 在节点 14 运行时部署 Firebase 函数并增加内存
- flutter - 如何从 Yahoo 日历和 webmail 日历中收集数据以将它们同步到颤振日历应用程序中?
- c# - 编写脚本以在程序中执行重复的业务任务
- bash - 如果一个进程正在运行,那么不要做任何事情