通过 INDEX 更新和删除 userDefaults 中的对象
Posted
技术标签:
【中文标题】通过 INDEX 更新和删除 userDefaults 中的对象【英文标题】:Update and delete object inside userDefaults by INDEX 【发布时间】:2020-11-04 13:17:04 【问题描述】:我创建了 3 个对象并将每个对象保存在用户默认值中,我如何更新并非所有数据,只有对象编号 3?
这是我如何保存和获取数据的代码:
func savePlayer(player: [Player])
UserDefaults.standard.set(try? PropertyListEncoder().encode(player), forKey:"player")
UserDefaults.standard.synchronize()
func getSports() -> [Player]?
if let data = UserDefaults.standard.value(forKey:"player") as? Data
let decodedSports = try? PropertyListDecoder().decode([Player].self, from: data)
return decodedSports
return nil
这是我的物品:
let playerOne = Player(id: 1, url: "https:\\www.google - 1.com", color: "#color 1", image: "imageBase64One", flag: false, position: 1)
let playerTwo = Player(id: 2, url: "https:\\www.google - 2.com", color: "#color 2", image: "imageBase64Two", flag: false, position: 2)
let playerThree = Player(id: 3, url: "https:\\www.google - 3.com", color: "#color 3", image: "imageBase64Three", flag: false, position: 3)
数据模型:
class Player: Codable
let ID: Int
let URL: String
let Color: String
let Image: String
var Flag: Bool
let Position: Int
init(id: Int, url: String, color: String, image: String, flag: Bool, position: Int)
self.ID = id
self.URL = url
self.Color = color
self.Image = image
self.Flag = flag
self.Position = position
我不明白如何为第二个对象更新例如选项“标志”,并且只删除对象两个而不是全部。
【问题讨论】:
当你调用 getSports 时,你会得到一个对象数组,所以只需像对待任何其他对象数组一样对待它,完成更改后再次调用 savePlayer 不相关但从不使用value(forKey
的UserDefaults
来获取Data
。有data(forKey:
感谢您的帮助 ;)
【参考方案1】:
无需在您的班级中设置每个项目的位置,也无需调用 UserDefaults.standard.synchronize(),因为它已被弃用。
不管怎样,只要你想从你的数组中编辑一个对象:
-
定义您的数组并将您的对象附加到其中:
var myArray: [Player] = []!
-
调用要编辑的数组的位置,如果要编辑第二个对象则:
myArray[2] = Player(id: 15, url: "https:\\www.niceUrl.com", color: .black, image: "niceImage", flag: true, position: 2)
savePlayer(player: myArray[2])
请注意,我在这里更改了所有值,如果您只想更改一个,您可以。
【讨论】:
以上是关于通过 INDEX 更新和删除 userDefaults 中的对象的主要内容,如果未能解决你的问题,请参考以下文章