Переопределить объектный метод с использованием протоколов и расширений Swift - PullRequest
0 голосов
/ 28 апреля 2020

Я хотел бы переопределить метод, который объявлен в рамках и реализован в расширении.

Вот что я пробовал:

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

Можно ли переопределить метод, реализованный в расширении?

1 Ответ

0 голосов
/ 28 апреля 2020

Работает, если добавить функцию name() также к MyHelloObject:

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

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

class MyHelloChildObject: MyHelloObject {
    override func name() -> String {
        "You"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...