同项 SwiftUI 列表

Posted

技术标签:

【中文标题】同项 SwiftUI 列表【英文标题】:Same item SwiftUI List 【发布时间】:2020-08-02 00:41:36 【问题描述】:

我创建了一个包含 Order 和 CartProduct 实体的核心数据应用程序。 Order 与 CartProduct 是一对多的关系,反之亦然。

我将产品添加到订单中,但有一个页面我想显示产品但看起来只显示最后一个产品。

@FetchRequest(
    entity: Order.entity(),
    sortDescriptors: [],
    predicate:NSPredicate(format: "status == %@", "ongoing")
) var orders: FetchedResults<Order>

func printProducts() 
    let array = orders[0].products!.array as! [CartProduct]
    for product in array 
        print("\(product.quantity) - \(product.name!)")
    


var body: some View 
        if(!orders.isEmpty)
        
            List(orders[0].products!.array as! [CartProduct])product in
               Text("\(product.quantity) * \(product.name!)")
            .onAppear(perform: printProducts) 
        

在 printProducts 中打印所有产品的正确数量,但在列表中,只有第一个产品的数量和名称重复(产品数量正确)。

你对此有什么想法吗?

【问题讨论】:

【参考方案1】:

通过将id 添加到列表中解决了这个问题。

@FetchRequest(
    entity: Order.entity(),
    sortDescriptors: [],
    predicate:NSPredicate(format: "status == %@", "ongoing")
) var orders: FetchedResults<Order>

func printProducts() 
    let array = orders[0].products!.array as! [CartProduct]
    for product in array 
        print("\(product.quantity) - \(product.name!)")
    


var body: some View 
        if(!orders.isEmpty)
        
            List(orders[0].products!.array as! [CartProduct], id: \.self)product in
               Text("\(product.quantity) * \(product.name!)")
            .onAppear(perform: printProducts) 
        

【讨论】:

以上是关于同项 SwiftUI 列表的主要内容,如果未能解决你的问题,请参考以下文章

蓝牙扫描启动 SwiftUI 后渲染列表

列表部分标题的 SwiftUI 2 清除背景

在 SwiftUI 中滑动列表时隐藏导航栏

SwiftUI 静态列表奇怪的重用行为

SwiftUI:如何使列表视图透明?如何更改列表视图背景颜色?

SwiftUI 列表禁用单元格按下