【问题标题】:how to group by swift array?如何按快速数组分组?
【发布时间】:2020-07-14 07:44:40
【问题描述】:

给定一个需要显示为 7 个元素的行列表的数字列表(考虑日历 iOS 应用程序中的天数),如果一个数字除以模数,是否可以有条件地将 HStack 包装在 VStack 中,例如?

    VStack(alignment: .center, spacing: 10) {
        ForEach(1...self.getDays(), id: \.self) { day in
            // something like if (day % 7 == 0) { VStack
            HStack(alignment: .center, spacing: 10) {
                DayView(dayNumber: day)
            }
        }
    }

或者,也许可以在不使用 ViewBuilder 的情况下按列表中的每 7 个元素应用组?

【问题讨论】:

    标签: arrays swift swiftui


    【解决方案1】:
    struct Person {
         let id: Int
         let name: String
    }
    var EgArray:[Person] = [
        Person(id: 1, name: "Jonh"),
        Person(id: 2, name: "Lee"),
        Person(id: 3, name: "George"),
        Person(id: 4, name: "Jonh"),
        Person(id: 4, name: "Jonh")
    ]
    let result = Dictionary(grouping: EgArray) { $0.name }
    

    【讨论】:

      【解决方案2】:

      您应该首先创建一个表示视图结构的数据结构:尝试将1...self.getDays() 转换为二维数组,每个内部数组都是“网格”的一行。例如,如果self.getDays 为 10,则二维数组将如下所示:

      [
          [1,2,3,4,5,6,7],
          [8,9,10]
      ]
      

      之后,我们可以使用两个ForEaches 来“循环”(我们实际上并没有循环任何东西。ForEach 并不是真正的循环......)二维数组并创建视图。

      要创建二维数组,您可以使用this answer 中的一种方式。

      然后你可以这样做:

      VStack(alignment: .center, spacing: 10) {
          // "chunked" does the aforementioned transformation
          ForEach(Array(1...self.getDays()).chunked(by: 7), id: \.self) { row in
              HStack(alignment: .center, spacing: 10) {
                  ForEach(row, id: \.self) { day in
                      DayView(dayNumber: day)
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-10-29
        • 1970-01-01
        • 2016-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-30
        • 1970-01-01
        • 2018-05-27
        相关资源
        最近更新 更多