1

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

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

extension UILabel: Localizable {

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

}

(我怎样才能做到这一点?

4

1 回答 1

0

你应该做的是实现变量观察者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片段

于 2017-03-21T16:52:53.680 回答