swift - 如何从 UserDefaults 向数组添加值?
问题描述
我一直在尝试从 UserDefaults.standard 向数组中添加值。
我的步骤:
- 在 UserDefaults 中添加一个值。
- 检查 Userdefautls 是否有值(从 0 到 100)
如果它在 UserDefaults 中有值,则将该值添加到数组中。
@IBAction func addfavorite(_ sender: Any) { UserDefaults.standard.set(myIndex, forKey:arr[myIndex]) } for myIndex in 0..<100 { if UserDefaults.standard.bool(forKey:arr[myIndex]) != nil { favoriteArr.append(myIndex) } }
将 'Bool' 类型的非可选值与 'nil' 进行比较总是返回 true
解决方案
存在的问题是,如果键没有值,则该bool(forKey:)
方法将始终返回,因为它返回一个 non optional 。检查 nil 的另一种方法是使用返回的方法false
Bool
UserDefaults
object(forKey:)
Any?
如果您的意图只是保留一个整数数组,您可以扩展 UserDefaults 并使用 getter 和 setter 创建一个计算属性,以使您的数据自动保留:
extension UserDefaults {
var favorites: [Int] {
get { array(forKey: "favorites") as? [Int] ?? [] }
set { set(newValue, forKey: "favorites") }
}
}
UserDefaults.standard.favorites = []
UserDefaults.standard.favorites.append(2)
UserDefaults.standard.favorites.append(7)
UserDefaults.standard.favorites // [2,7]
推荐阅读
- python - “InvalidArgumentError:不兼容的形状:[64,40000] vs. [64] [Op:Mul]”在张量之间进行运算时?
- java - 使用邮递员在 Spring Boot 应用程序中添加任意数量的整数
- sql - SQLServer 通过两个条件将结果限制为 1
- python - 如何遍历不同的Dataframes以检查pandas中给定列中的任何值是否不同于0并将结果保存在数组中
- css - 如何使用具体化类居中表单元素
- c# - 无法从其他应用程序获取元素的内部
- java - 是否可以在 Quarkus 应用程序属性中部分覆盖 persistence.xml?
- android - jetpack compose 不响应模拟器上的键盘输入
- c++ - 使用初始化列表在构造函数中初始化复杂映射
- powershell - 使用管理员凭据启动进程并使用 RunAs 执行程序文件 C 中的特定 exe