-2

我想覆盖在框架中声明并在扩展中实现的方法。

这是我尝试过的:

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

是否可以覆盖在扩展中实现的方法?

4

1 回答 1

0

如果您将该name()功能也添加到MyHelloObject

class MyHelloObject: Object, SayHelloProtocol {
    override func printSomething() {
        hello()
    }

    func name() -> String {
        "Someone"
    }
}

class MyHelloChildObject: MyHelloObject {
    override func name() -> String {
        "You"
    }
}
于 2020-04-28T19:31:08.890 回答