通过 INDEX 更新和删除 userDefaults 中的对象

Update and delete object inside userDefaults by INDEX

我创建了 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
    }
}

我不明白如何更新第二个对象的选项“标志”,并且只删除对象二而不是全部。

无需在 class 中设置每个项目的位置,也无需调用 UserDefaults.standard.synchronize(),因为它已被弃用。

无论如何,只要你想编辑数组中的对象:

  1. 定义您的数组并将您的对象附加到它:
var myArray: [Player] = []!
  1. 调用要编辑的数组位置,如果要编辑第二个对象则:
myArray[2] =  Player(id: 15, url: "https:\www.niceUrl.com", color: .black, image: "niceImage", flag: true, position: 2)
savePlayer(player: myArray[2])

请注意,这里我更改了所有值,如果您只想更改一个值也可以。