swift 获取不同ViewController中的用户默认值

dced5bon  于 2022-11-21  发布在  Swift
关注(0)|答案(1)|浏览(112)

我在ViewControllerSettings中定义了如下用户默认值
public let kAlertsKey = "ALERTS_KEY"
并使用以下代码通过开关和ìf语句对其进行修改

if switchAlerts.isOn{
            UserDefaults.standard.removeObject(forKey: kAlertsKey)
            UserDefaults.standard.set("On", forKey: kAlertsKey)
            UserDefaults.standard.synchronize()
            print("on")
        }else{
            UserDefaults.standard.removeObject(forKey: kAlertsKey)
            UserDefaults.standard.set("Off", forKey: kAlertsKey)
            UserDefaults.standard.synchronize()
            print("off")
        }

我希望将状态OnOff共享到6个不同的ViewController:

  • 视图控制器GUI
  • 查看控制器创建
  • 查看控制器列表
  • ...

我的想法是创建一个枚举,例如:

enum ToggleSwitch: Int{
    case On, Off
    
    var isActive: Bool{
        switch self {
        case .On:
            return true
        case .Off:
            return false
        }
    }
}

但我不确定如何遵循或我需要在我的枚举情况下返回什么,以及我在每个ViewController中的哪里调用它。
提前感谢!

xhv8bpkk

xhv8bpkk1#

我将向UserDefaults添加一个简单的扩展:

extension UserDefaults {
    var isAlertsEnabled: Bool {
        get {
            return bool(forKey: "ALERT_KEY")
        }
        set {
            set(newValue, forKey: "ALERT_KEY")
        }
    }
}

请注意,这里使用的是实际的Bool值,而不是使用特殊的字符串值。另外请注意,在设置新值之前,不需要删除旧值。
您可以在项目中的任何位置使用属性。
例如:

let enabled = UserDefaults.standard.isAlertsEnabled

或:

UserDefaults.standard.isAlertsEnabled = switchAlerts.isOn

仅供参考-synchronize()已明确标记为过时,不应使用。

相关问题