swift - Swift ObservedObject 'self' used in property access 'userPreferences' before all stored properties are initialized
问题描述
I'm having the following problem can you tell me where I'm wrong?
import EventKit
import ServiceManagement
private struct PreferencesKeys {
static let backgroundIsTransparent = "backgroundIsTransparent"
static let isDarkMode = "isDarkMode"
}
class UserPreferences: ObservableObject {
static let instance = UserPreferences()
private init() {
// This prevents others from using the default '()' initializer for this class.
}
private static let defaults = UserDefaults.standard
@Published var backgroundIsTransparent: Bool = {
guard UserDefaults.standard.object(forKey: PreferencesKeys.backgroundIsTransparent) != nil else {
return true
}
return UserDefaults.standard.bool(forKey: PreferencesKeys.backgroundIsTransparent)
}() {
didSet {
UserPreferences.defaults.set(backgroundIsTransparent, forKey: PreferencesKeys.backgroundIsTransparent)
}
}
@Published var isDarkMode: Bool = {
guard UserDefaults.standard.object(forKey: PreferencesKeys.isDarkMode) != nil else {
return true
}
return UserDefaults.standard.bool(forKey: PreferencesKeys.isDarkMode)
}() {
didSet {
UserPreferences.defaults.set(isDarkMode, forKey: PreferencesKeys.isDarkMode)
}
}
}
解决方案
这是一个常见的错误。
您将popover
在初始化之前进行修改statusItem
。这违反了规则,这就是错误所说的。
首先 初始化statusItem
然后设置背景颜色popover
。
我statusItem
什至会初始化
let statusItem = NSStatusbar.system.status...
问题中的代码(文本)无关紧要。
推荐阅读
- bash - GNU make:如何等待“cp”命令完成
- php - 在 Kali Linux LocalHost 2018 上使用 PHP 设置 Sendmail
- algorithm - 如何通过联合查找将数据元素存储在组/集群中
- dart - setState 没有更新值
- asp.net-mvc - 从 EnumDropDownListFor 中删除空条目
- python - tkinter 手表剪贴板 GetMessage 无返回值
- bash - 使用 bash 解析 .env 文件并将其注入命令行
- python-3.x - 推特结构特别 - 转推 - 我的代码逻辑
- c# - 为什么 selenium chrome 驱动程序在后台运行(无头模式)
- git - 跳过 gitlab 管道中的上传文件夹