我有一个带有单个变量的协议
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)
}
}
}
(如何(我能做到这一点?
你应该做的是实现变量观察者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 代码段