我如何在列表中设置限制线

How I can set limit line in List

我想在我的列表中设置一个限制;我希望它只显示 5 行。

这是我的代码:

struct ContentView: View {

    let allnum = ["1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10"]

    var body: some View {
        List {
            ForEach(self.allnum , id: \.self) { num in
                Text("\(num)")
            }
        }
    }
}

当我将 List 更改为 List(0 ..< 5) { _ in 时,我看到 5 行,但所有元素都在数组中。

任何建议

谢谢!

我做了一个 ForEach,计数从 0 到 <5,并使用该数字索引数组。在生产代码中,您可能需要进行测试以确保您不会尝试使用超出数组末尾的索引。

struct ContentView: View {
    let allnum = ["1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10"]
    var body: some View {
        List {
            ForEach(0 ..< 5 ) { num in
                Text("\(self.allnum[num])")
            }
        }
    }
}

你不能做以下事情吗:

struct ContentView: View {
    let allnum = ["1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10"]
    var body: some View {
        List {
            ForEach(self.allnum[0 ..< 5], id: \.self) { num in
                Text("\(num)")
            }
        }
    }
}

所以你只取了整个列表的一个范围。

关于代码的 3 个步骤注释

  1. 您应该只取数组的前 n 个元素(这里是 5)作为数据源。
  2. List不需要ForEach.
  3. 简单的闭包参数不需要名称。

因此 body 的最小重构工作代码将是:

var body: some View {
    List(allnum.prefix(5), id: \.self) { Text([=10=]) }
}

更多代码更少

如果您在某处实施此扩展:

extension String: Identifiable { public var id: String { self } }

列表代码会更小更简单,如:

List(allnum.prefix(5)) { Text([=12=]) }