swiftui - 如何显示多维数组?
问题描述
我有一个带有自定义类型的二维数组。
我想做类似的事情:
HStack {
ForEach(2dArray) { x in
VStack {
ForEach(self.2dArray[x.index]) { y in
我遇到的主要问题是我不知道如何获取 x.index。
解决方案
所以我要说你应该这样做来迭代一个二维数组:
var data = [[1,2,3],[4,5,6],[7,8,9]]
ForEach(data.identified(by: \.self)) { array in
ForEach(array.identified(by: \.self)) { element in
Text("\(element)")
}
}
但是 XCode 11 beta 在 SwiftUI 和类型推断方面仍然存在很多问题,所以你会得到一个编译器错误,即使它应该可以工作。因此,现在,您必须将所有内容分离为 XCode 编译器可以处理的函数,但是对于 SwiftUI 使用的复杂类型,它会很快变得丑陋。这是一个例子:
var data = [[1,2,3],[4,5,6],[7,8,9]]
var body: some View {
doubleForEach(data: data)
}
func doubleForEach(data: [[Int]]) -> ForEach<IdentifierValuePairs<[[Int]], [Int]>,ForEach<IdentifierValuePairs<[Int], Int>, Text>> {
return ForEach(data.identified(by: \.self)) { row in
self.foreach(dataArr: row)
}
}
func foreach(dataArr: [Int]) -> ForEach<IdentifierValuePairs<[Int], Int>, Text> {
return ForEach(dataArr.identified(by: \.self)) { data in
Text("\(data)")
}
}
看起来像这样:
推荐阅读
- mysql - Google Cloud MySQL 托管实例使用 100 procent CPU 数小时。它在用什么?
- python - 如何在函数中定义变量而不重置它
- flutter - Flutter Hot Load 没用,为什么?
- c++ - 如何可靠地将线程与 concurrency::parallel_for 中的对象实例配对?
- python-3.x - 如何使用条目和按钮替换标签
- sockets - 为什么从 Unix 套接字读取时使用 netcat 发送 ^D 不会触发 EOF?
- javascript - Extjs 4.2.1 带有分页的网格面板的本地过滤
- java - Java - Camunda BPMN 模型 API:如何保存有效的 xml?
- regex - 关于 RegExReplace 的 AHK 帮助
- mysql - MYSQL查询检索评论和回复