如何解决初始化不会调用属性包装器的覆盖类函数
我有一个基类和一个派生类...基类有一个类函数 Sub Dropdown6_BeiÄnderung()
'DropBox Location
Dim Update As Integer
DropVal = Range("L18").Value
Update = MsgBox("You have selected " & Cells(18,12) & " as Proposal Location. This will reset the Labor sheets. Do you want to continue?",vbYesNo,vbDefaultButton1)
If Update = vbYes Then
Worksheets("NA-Hours").Range("C8").Value = 0
Worksheets("LA-Hours").Range("C8").Value = 0
Worksheets("EU-Hours").Range("C8").Value = 0
Worksheets("MEA-Hours").Range("C8").Value = 0
Worksheets("AP-Hours").Range("C8").Value = 0
For i = 17 To 21
SName = Cells(i,16).Value
If Cells(i,17).Value = 1 Then
Worksheets(SName).Visible = True
Else: Worksheets(SName).Visible = False
End If
Next
Else
me.Drop Down 6.text = DropVal
End If
End Sub
,它使用包装器指示用户默认存储的用户默认键
然而,userDefaultKeyPrefix()
类以 AdvancedManager
BaseManager
而不是 userDefaultKeyPrefix()
的 "BASE.someVar"
类值结束
为什么会发生这种情况以及如何达到预期的结果,因此密钥由班级提供
someVar 的 init 被称为 Base 类,而不是 Advanced
"ADVANCED.someVar"
更新:这个波纹管按预期工作(关键是“class BaseManager {
class func userDefaultKeyPrefix() -> String {
return "BASE"
}
@UserDefault(userDefaultKeyPrefix() + ".someVar",defaultValue: false) var someVar: Bool
}
class AdvancedManager: BaseManager {
override class func userDefaultKeyPrefix() -> String {
return "ADVANCED"
}
}
@propertyWrapper
struct UserDefault<T> {
let key: String
let defaultValue: T
init(_ key: String,defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
}
set {
//let oldValue = wrappedValue
UserDefaults.standard.set(newValue,forKey: key)
UserDefaults.standard.synchronize()
}
}
}
”),但破坏了属性包装器的干净代码
lazy
欢迎任何更好的解决方案作为答案
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。