我一直在尝试从UserDefaults.standard向数组添加值。
我的步骤:
(如果它在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)
}
}
将“布尔”类型的非可选值与“无”进行比较总是返回true
答案 0 :(得分:1)
这里的问题是,bool(forKey:)
方法在没有键值的情况下将始终返回false
,因为它返回了非可选的Bool
。检查nil的另一种方法是使用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]