微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

初始化不会调用属性包装器的覆盖类函数

如何解决初始化不会调用属性包装器的覆盖类函数

我有一个基类和一个派生类...基类有一个函数 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 举报,一经查实,本站将立刻删除。