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

Swift 4中Int相加方法及UserDefaults存数相加报错求助

解决UserDefaults累加数字时的可选类型错误

这个问题我做项目的时候也踩过坑,核心原因就是Swift的可选类型(Optional)不能直接参与算术运算,咱们拆解一下问题,再给出几种实用的解决办法:

为什么会报错?

当你从UserDefaults读取数值时,如果用object(forKey:)再转成Int?(或者不小心把值处理成了可选类型),得到的结果是Int?——因为系统无法保证这个键一定存在对应的数值。而Swift是强类型语言,不允许直接对两个可选值(或可选值与非可选值)使用+运算符,这就是你看到'Binary operator '+' cannot be applied to two 'Int?' operands'错误的根本原因。

实用解决方法

方法1:用系统自带的integer(forKey:)直接获取非可选值

这是最简单的方式,UserDefaults的integer(forKey:)方法本身会在键不存在时返回0,直接拿到非可选的Int,可以直接累加:

// 读取当前值,无则返回0
var currentNum = UserDefaults.standard.integer(forKey: "myNumber")
// 执行累加
currentNum += 1
// 存回UserDefaults
UserDefaults.standard.set(currentNum, forKey: "myNumber")

方法2:用空合并运算符(??)给可选值兜底

如果你是用object(forKey:)读取(比如需要兼容其他类型),可以用??给可选值设置默认值,把它转成非可选Int:

// 读取值,为空则默认0
let currentNum = UserDefaults.standard.object(forKey: "myNumber") as? Int ?? 0
// 累加后存回
UserDefaults.standard.set(currentNum + 1, forKey: "myNumber")

方法3:可选绑定(if let/guard let)安全解包

如果需要区分“值存在”和“值不存在”的场景(比如第一次启动应用时初始化特定值),可以用可选绑定明确处理两种情况:

// if let版本:存在则累加,不存在则初始化
if let currentNum = UserDefaults.standard.object(forKey: "myNumber") as? Int {
    UserDefaults.standard.set(currentNum + 1, forKey: "myNumber")
} else {
    // 第一次使用,设为初始值比如1
    UserDefaults.standard.set(1, forKey: "myNumber")
}

// guard let版本:提前处理不存在的情况,代码更清爽
guard let currentNum = UserDefaults.standard.object(forKey: "myNumber") as? Int else {
    UserDefaults.standard.set(1, forKey: "myNumber")
    return
}
UserDefaults.standard.set(currentNum + 1, forKey: "myNumber")

进阶:封装扩展简化操作

如果你的项目里需要多次做这种累加操作,可以给UserDefaults写个扩展,把逻辑封装起来,避免重复代码:

extension UserDefaults {
    /// 对指定key的整数进行累加操作
    func incrementInteger(forKey key: String) {
        let currentValue = self.integer(forKey: key)
        self.set(currentValue + 1, forKey: key)
    }
}

使用的时候只需要一行代码:

UserDefaults.standard.incrementInteger(forKey: "myNumber")

小提醒

不需要每次调用set后都手动调用synchronize(),系统会自动同步到磁盘;只有在需要立即确保数据写入(比如应用即将退到后台)时,才需要调用这个方法。

内容的提问来源于stack exchange,提问作者N.Lucas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:17