使用Swift协议和扩展重写对象方法

问题描述 投票:-1回答:1

我想重写属于我使用的库的一部分的方法。我想使用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
swift swift-extensions protocol-oriented
1个回答
0
投票

[如果您还将name()功能也添加到MyHelloObject,则可以使用:

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

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

class MyHelloChildObject: MyHelloObject {
    override func name() -> String {
        "You"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.