检测存储在 UserDefaults 中的数组中的项目
Deteting item in an array stored in UserDefaults
我在 UserDefaults 中保存项目并且它工作正常。我只是将新元素附加到数组中。现在删除了整个保存的项目,但现在我想让用户能够只删除一个项目,而不是删除整个保存的项目。
下面是我如何删除整个数组
public func deleteSavePropery() {
delete(key: propertyKey)
}
private func delete(key: String) {
storage.removeObject(forKey: key)
}
注意,saveProperty 是一个 Codable 对象
UserDefaults
不提供任何 API 来管理特定密钥的内容。其实它并不关心那里保存了什么样的内容。
因此,您需要做的是:从 UserDefaults
中提取数组,对其进行编辑,然后将更新后的数组保存到 UserDefaults
。
你需要,
- 从
UserDefaults
中获取 array
。
- 根据您的情况从
array
中删除 element
。
- 将
array
保存回 UserDefaults
。
示例 1: 根据 index
.
从 array
中删除 element
func remove(at index: Int) {
if let data = storage.data(forKey: "YOUR_KEY") {
do {
var arr = try JSONDecoder().decode([Item].self, from: data)
arr.remove(at: index)
let data = try JSONEncoder().encode(arr)
storage.set(data, forKey: "YOUR_KEY")
} catch {
print(error)
}
}
}
示例 2: 从 array
.
中删除特定的 element
func remove(element: Item) {
if let data = storage.data(forKey: "YOUR_KEY") {
do {
var arr = try JSONDecoder().decode([Item].self, from: data)
arr.removeAll { [=11=] === element }
let data = try JSONEncoder().encode(arr)
storage.set(data, forKey: "YOUR_KEY")
} catch {
print(error)
}
}
}
您需要检索数组(如果存在)然后删除该项目最后保存回来
let storage = UserDefaults.standard
private func deleteItem(key: String,item:Item) {
if let data = storage.data(forKey: key) , var arr = try? JSONDecoder().decode([Item].self, from: data) {
arr.removeAll(where: { [=10=] == item})
guard let res = try? JSONEncoder().encode(arr) else { return }
storage.set(res, forKey: key)
}
}
struct Item:Codable,Equatable {
let name:String
}
我在 UserDefaults 中保存项目并且它工作正常。我只是将新元素附加到数组中。现在删除了整个保存的项目,但现在我想让用户能够只删除一个项目,而不是删除整个保存的项目。
下面是我如何删除整个数组
public func deleteSavePropery() {
delete(key: propertyKey)
}
private func delete(key: String) {
storage.removeObject(forKey: key)
}
注意,saveProperty 是一个 Codable 对象
UserDefaults
不提供任何 API 来管理特定密钥的内容。其实它并不关心那里保存了什么样的内容。
因此,您需要做的是:从 UserDefaults
中提取数组,对其进行编辑,然后将更新后的数组保存到 UserDefaults
。
你需要,
- 从
UserDefaults
中获取array
。 - 根据您的情况从
array
中删除element
。 - 将
array
保存回UserDefaults
。
示例 1: 根据 index
.
array
中删除 element
func remove(at index: Int) {
if let data = storage.data(forKey: "YOUR_KEY") {
do {
var arr = try JSONDecoder().decode([Item].self, from: data)
arr.remove(at: index)
let data = try JSONEncoder().encode(arr)
storage.set(data, forKey: "YOUR_KEY")
} catch {
print(error)
}
}
}
示例 2: 从 array
.
element
func remove(element: Item) {
if let data = storage.data(forKey: "YOUR_KEY") {
do {
var arr = try JSONDecoder().decode([Item].self, from: data)
arr.removeAll { [=11=] === element }
let data = try JSONEncoder().encode(arr)
storage.set(data, forKey: "YOUR_KEY")
} catch {
print(error)
}
}
}
您需要检索数组(如果存在)然后删除该项目最后保存回来
let storage = UserDefaults.standard
private func deleteItem(key: String,item:Item) {
if let data = storage.data(forKey: key) , var arr = try? JSONDecoder().decode([Item].self, from: data) {
arr.removeAll(where: { [=10=] == item})
guard let res = try? JSONEncoder().encode(arr) else { return }
storage.set(res, forKey: key)
}
}
struct Item:Codable,Equatable {
let name:String
}