Переопределите установщик определенной в протоколе переменной и используйте получатель из реализации протокола по умолчанию
У меня есть протокол с одной переменной
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 для класса