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

Swift读取UserDefaults存储的Int数组赋值到自定义数组时为空问题求解

问题原因
  • 你存储到UserDefaults的是一维Int数组[Int]类型,但代码中读取时尝试转换为[[Int:Any]](字典组成的数组),两种类型完全不匹配,所以类型转换会直接失败,最终intArray被赋值为??运算符后面的默认空数组。
  • 你直接打印defaults.array(forKey: "Favorites")能看到正常输出,是因为这个方法返回的是可选[Any]类型,本身是有值的,只是强转成不符合的类型时才会返回nil。
修复方案
  1. 首先修正顶层变量的类型声明,把intArray修改为和存储数据匹配的[Int]类型:
let defaults = UserDefaults.standard
// 原声明是字典数组,改为和存储数据匹配的Int数组
var intArray = [Int]()
  1. 调整viewDidLoad中的读取转换逻辑,对应修改类型转换的目标类型:
override func viewDidLoad() {
    super.viewDidLoad()
    // 转换目标改为[Int],和存储的类型对齐
    intArray = defaults.array(forKey: "Favorites") as? [Int] ?? []
    print(intArray)
}
补充说明
  • UserDefaults读写数据时必须保证读写的类型完全一致,否则就会出现转换失败取值为空的问题。如果后续需要存储更复杂的自定义结构,建议先通过Codable协议转成Data再存储到UserDefaults中。

内容的提问来源于stack exchange,提问作者Douglas W. Palme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:36:03