在 SwiftUI 中按 ID 删除列表中的项目
Posted
技术标签:
【中文标题】在 SwiftUI 中按 ID 删除列表中的项目【英文标题】:Delete an Item in a list in SwiftUI by ID 【发布时间】:2021-09-06 11:08:14 【问题描述】:我有一个包含可识别项目的列表,如何手动删除,参数是项目的 id??
查看:
struct FavListView: View
@StateObject var favList = FavViewModel()
@ViewBuilder
var body: some View
NavigationView
List
ForEach(favList.items, id: \.self.id) data in
NavigationLink(
destination: ItemDisplayVC(data.slug ?? "").navigationTitle("").navigationBarHidden(true),
label:
ListContentItem(name: data.name ?? "", image: data.image ?? "", released: data.released ?? "", rank: data.rank ?? -1)
)
.onDelete(perform: indexSet in
print("\(indexSet)")
)
.navigationTitle("Favourite")
.onAppear
favList.fetchData()
这是模型
public struct ItemPreviewModel: Codable, Hashable, Identifiable
public var id: Int?
var slug: String?
var name: String?
var image: String?
var released: String?
var desc: String?
var rating: Float?
var rank: Int?
enum CodingKeys: String, CodingKey
case name, rating, released, id, slug
case desc = "description_raw"
case image = "background_image"
case rank = "rating_top"
这是删除数据库中项目的手动函数:
func onDelete(id:Int)
///perform delete by id
// refresh the view
我可以使用 swiftui 中的任何内置本机函数吗?因为我喜欢将删除动画整合到列表中。
非常感谢
【问题讨论】:
这是一个 SwiftUI 问题吗?如果是,SwiftUI 代码在哪里? 对不起,我忘记添加了 您的视图显示您的视图模型FavViewModel
中的项目。因此,您可以在视图模型中实现 delete(id:)
。
我已经做到了,我已经在我的视图模型中构建了 onDelete 函数
但是,我想使用 ForEarch 中 onDelete 的内置动画
【参考方案1】:
你可以试试这样的:
List
ForEach(favList.items, id: \.self.id) data in
NavigationLink(
destination: ItemDisplayVC(data.slug ?? "").navigationTitle("").navigationBarHidden(true),
label:
ListContentItem(name: data.name ?? "", image: data.image ?? "", released: data.released ?? "", rank: data.rank ?? -1)
)
.onDelete(perform: deleteItemsId)
func deleteItemsId(at offsets: IndexSet)
for i in offsets.makeIterator()
let theItem = favList.items[i]
// do your stuff with theItem.id
// onDelete(id: theItem.id)
【讨论】:
谢谢你,最后。你真的帮了我很多,喜欢很多以上是关于在 SwiftUI 中按 ID 删除列表中的项目的主要内容,如果未能解决你的问题,请参考以下文章