gpt4 book ai didi

swift - 如何更新列表中的一对多内容?

转载 作者:行者123 更新时间:2023-11-30 14:01:03 25 4
gpt4 key购买 nike

假设我有一个用户,它有一些宠物(有主键)。

class User : Object {
let pets = List<Pet>()
}

现在我想更新列表中的宠物(通过 API)。我该怎么做呢?删除所有宠物并插入新宠物?没有什么比 createOrUpdate() 方法更好的了。

最佳答案

列表上没有具有创建或更新语义的方法。但在 Realm 上有一个用于单个对象的方法。您可以通过不同的方式利用这一事实。

如果您已经有一个用户并且只获得更新的宠物列表,则需要清理不再引用的宠物,从用户中删除所有宠物,然后添加所有新宠物。

let realm = …
let user = …
let newPetList = [["name": "Rex"], ["name": "Gustav"]]

// If pets can belong only to one user, you may want to delete them by:
realm.delete(user.pets)
// Alternatively you can just remove them from the updated user:
//user.pets.removeAll()

let newPets = newPetList.map { (newPetData) in
return realm.create(Pet, newPetData, update: true)
}
user.pets.appendContentsOf(newPets)

如果您获得完整更新的用户数据并假设您的用户有主键,那么您还可以直接对用户使用创建或更新:

class User : Object {
dynamic var id: Int
let pets = List<Pet>()

class func primaryKey() -> String {
return "id"
}
}

let userData = ["id": "23", "pets": [["name": "Rex"], ["name": "Gustav"]]]
let user = realm.create(User, userData, update: true)

但这不会负责清理之前可能为该用户创建的宠物。

关于swift - 如何更新列表中的一对多内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32996246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com