覆盖协议定义变量的 setter 并使用协议默认实现中的 getter



我有一个带有单个变量的协议

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

为此,我实现了一个默认的 getter

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的 setter,但对其 getter 使用默认实现,例如:

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

(如何(我能做到这一点?

你应该做的是实现变量观察者didSetwillSet

下面是基于您的代码的代码片段

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 代码段

相关内容

  • 没有找到相关文章

最新更新