首页 > 解决方案 > Swift ObservedObject 'self' used in property access 'userPreferences' before all stored properties are initialized

问题描述

enter image description here

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)
        }
    }
    
}

标签: swiftmacosswiftuiinitializationobservedobject

解决方案


这是一个常见的错误。

您将popover在初始化之前进行修改statusItem。这违反了规则,这就是错误所说的。

首先 初始化statusItem然后设置背景颜色popover

statusItem什至会初始化

let statusItem = NSStatusbar.system.status...

问题中的代码(文本)无关紧要。


推荐阅读