微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何允许 ForEach 布局项在 SwiftUI 中显示数组中的重复项?

如何解决如何允许 ForEach 布局项在 SwiftUI 中显示数组中的重复项?

我正在使用多项选择答案测验应用程序。

var itemstemp = ["ant","bat","bear","bee","bird","butterfly","camel","cat","cheetah","chick","chicken"]

已更新 这是我的测验应用程序的示例。

  let answerIndex = Int.random(in: 0...3) // for correct answer
  itemstemp!.shuffle() // to multiple choose option change. 

这里是错误

线程 1:致命错误:每个布局项只能出现一次

波纹管代码崩溃

LazyVGrid(columns: [GridItem(),GridItem()],spacing: 16) {
       ForEach(itemstemp) { item in
            vstack {
                    Text(item).id(UUID())
                      .matchedGeometryEffect(id:UUID(),in: namespace,isSource: !show)
                      .onTapGesture{
                               print(" tapped!")
                        }
                    }.matchedGeometryEffect(id: "container\(UUID())",in: namespace)
                 }
              }

这是一个测验应用程序,因此可以选择多个选项来选择正确的答案。数组项将在每个循环中多次出现。

所以需要每个布局项多次出现。

解决方法

对于唯一标识符。使用模型数组而不是字符串数组。

首先,创建一个模型。

struct Item: Identifiable {
    var id = UUID()
    var name: String
}

那么,你的数组是

var itemsTemp: [Item] = [
    .init(name: "ant"),.init(name: "bat"),.init(name: "ant"),.init(name: "bear"),.init(name: "bee"),.init(name: "butterfly"),.init(name: "bear")
]

现在,你的循环是

//Other Code
ForEach(itemsTemp,id:\.id) { item in
    //Other Code
}
//Other Code


第二种方法是使用 .indices

//Other Code
ForEach(itemsTemp.indices) { index in
    let item = temsTemp[index]
    //Other Code
}
//Other Code
,

尝试模型:

enter image description here

Select parent_order_id,product_id,hub_id,cast(1- '0.05' * DATEDIFF(MONTH,SYSDATE(),order_processing_date)as unsigned) AS total_sum 
FROM (select q1.parent_order_id,q1.product_id,q1.hub_id,q1.order_processing_date from (select o1.parent_order_id,o2.product_id,o1.hub_id,o1.order_processing_date from licious.orders as o1 join licious.order_items as o2 on o1.order_id = o2.order_id 
    WHERE DATE(o1.order_processing_date) BETWEEN DATE(DATE_SUB(CURRENT_TIMESTAMP(),INTERVAL 90 day) )AND DATE(CURRENT_TIMESTAMP()) 
    AND  o1.status = "Delivered") as q1 
join ((select o1.parent_order_id from licious.orders as o1 join licious.order_items as o2 on o1.order_id = o2.order_id 
      WHERE DATE(o1.order_processing_date) BETWEEN DATE(DATE_SUB(CURRENT_TIMESTAMP(),INTERVAL 90 day) )
      AND DATE(CURRENT_TIMESTAMP()) AND  o1.status = "Delivered" group by parent_order_id having count(parent_order_id > 1)
      )) as q2 on q1.parent_order_id = q2.parent_order_id) table1
    group by 
      parent_order_id,order_processing_date 
    order by 
      parent_order_id desc,total_sum desc;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。