You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift技术问题:如何实现绑定UserDefaults的布尔变量的set方法

你的Swift UserDefaults绑定布尔变量的代码其实已经没问题啦!

嘿,先给你吃个定心丸:你写的set部分代码完全正确,这个计算属性已经能完美实现你想要的需求——给continuousPurchase赋值时,值会自动存入UserDefaults;读取这个变量时,会从UserDefaults里取出对应的值。

关于set的两种写法

你现在的写法是显式给set指定了参数名value,这完全符合Swift语法。当然,Swift也提供了更简洁的写法:省略参数名,直接用系统默认的newValue变量,效果是一样的,写法如下:

var continuousPurchase: Bool {
    get {
        UserDefaults.standard.bool(forKey: "continuousPurchase")
    }
    set {
        UserDefaults.standard.set(newValue, forKey: "continuousPurchase")
    }
}

选哪种全看你个人习惯,怎么清晰怎么来。

优化小技巧:别硬写字符串Key

为了避免重复写Key字符串时不小心拼错(这种低级错误排查起来超烦),建议把Key提取成一个静态常量,比如放到UserDefaults的扩展里:

extension UserDefaults {
    static let continuousPurchaseKey = "continuousPurchase"
}

var continuousPurchase: Bool {
    get {
        UserDefaults.standard.bool(forKey: UserDefaults.continuousPurchaseKey)
    }
    set {
        UserDefaults.standard.set(newValue, forKey: UserDefaults.continuousPurchaseKey)
    }
}

这样后续不管哪里用到这个Key,直接用常量就行,再也不用担心拼写错误啦。

额外补充:自定义默认值

默认情况下,如果UserDefaults里还没存过这个Key的值,bool(forKey:)会返回false。如果你想要自定义默认值(比如默认开启,也就是true),可以修改get部分的逻辑:

var continuousPurchase: Bool {
    get {
        // 这里用object(forKey:)先判断是否存在,不存在就返回自定义默认值true
        UserDefaults.standard.object(forKey: UserDefaults.continuousPurchaseKey) as? Bool ?? true
    }
    set {
        UserDefaults.standard.set(newValue, forKey: UserDefaults.continuousPurchaseKey)
    }
}

这样你的代码不仅功能达标,还更健壮、更好维护~

内容的提问来源于stack exchange,提问作者Arash Etemad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:12:27