Переопределите установщик определенной в протоколе переменной и используйте получатель из реализации протокола по умолчанию

У меня есть протокол с одной переменной

protocol Localizable {
    var localizationKey: String { get set }
}

для которого я реализую метод получения по умолчанию:

extension Localizable {
    var localizationKey: String {
        get {
            assert(true, "❌ Do not use this getter! 
                          The localizationKey is a convenience variable 
                          for setting a localized string.")
            return ""
        }
    }
}

Сейчас я делаю несколько классов, соответствующих этому протоколу. В этих классах я хочу переопределить localizationKey Установщик, но использует реализацию по умолчанию для своего получателя, например:

extension UILabel: Localizable {

    var localizationKey: String {
        get {
            // ❓ Use default implementation from protocol extension here
        }
        set {
            text = LocalizedString(forKey: newValue)
        }
    }

}

(Как мне это сделать?

1 ответ

Что вы должны сделать, это реализовать переменную обозревателя didSet или же willSet

Вот фрагмент кода, основанный на вашем коде

protocol Localizable {
    var localizationKey: String { get set }
}


extension Localizable {
    var localizationKey: String {
        get {
            return ""
        }
    }
}

class UILabel: Localizable {

    var localizationKey: String {
        willSet
        {
            text = LocalizedString(forKey: newValue)
        }
    }

}

PD: я забыл это. Расширение не может переопределять свойства, вы должны использовать фрагмент willSet для класса

Другие вопросы по тегам