1

我正在尝试在我的列表中设置一个限制;我希望它只显示 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 行,但包含数组中的所有元素。

任何建议请

谢谢!

4

3 回答 3

2

关于代码的 3 步注释

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

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

var body: some View {
    List(allnum.prefix(5), id: \.self) { Text($0) }
}

更多更少的代码

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

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

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

List(allnum.prefix(5)) { Text($0) }
于 2019-11-23T18:36:50.140 回答
0

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

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])")
            }
        }
    }
}
于 2019-11-23T01:59:37.633 回答
0

您不能执行以下操作:

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)")
            }
        }
    }
}

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

于 2019-11-23T09:33:39.337 回答