首页 > 解决方案 > Swift 中 userDidSetUp 的 UserDefaults 初始值

问题描述

导航 rootViewController 取决于用户设置,因为我试图检查用户是否在主屏幕启动之前完成了所有入职表单。我的问题是如何在导航中为 UserDefaults 设置初始值。这总是打印“假”

extension UserDefaults {
    var didUserSetUp: Bool? {
        get {
            ///// Register the app default:
            /// Initialize value from UserDefaults returns false
            UserDefaults.standard.register(defaults: ["didUserSetUp" : false])
            return UserDefaults.standard.bool(forKey: "didUserSetUp")
        }
        set {
            /// Set value to UserDefaults
            UserDefaults.standard.set(newValue, forKey: "didUserSetUp")
        }
    }

}

方法是在代码中设置: UserDefaults.standard.didUserSetUp = false if UserDefaults.standard.didUserSetUp { }

标签: computed-propertiesuserdefaultsrootviewcontrollerswift5.1coordinator-pattern

解决方案


您需要展示如何尝试使用您创建的属性的示例代码,但我尝试了您在此处显示的内容,并且能够使其按预期工作。这是我所做的:

extension UserDefaults {
    var didCompleteOnboarding: Bool? {
        get {
            UserDefaults.standard.register(defaults: ["didCompleteOnboarding": false])
            return UserDefaults.standard.bool(forKey: "didCompleteOnboarding")
        }
        set {
            UserDefaults.standard.set(newValue, forKey: "didCompleteOnboarding")
        }
    }
}

然后在根视图控制器中:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        UserDefaults.standard.didCompleteOnboarding = true
        print(UserDefaults.standard.didCompleteOnboarding ?? false)
    }
}

true在控制台中打印。


推荐阅读