我想重写属于我使用的库的一部分的方法。我想使用POP(面向协议的编程),因为我希望这种新行为可用于不同的类。
这是我尝试过的:
import UIKit
// Code from a lib
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"
}
}