ios - 方括号 [ ] 在这个 swift ui 示例中如何工作?它会将其返回值传递给“i”吗?
问题描述
方括号如何[ ]
在这里工作?它是否将其返回值传递给'i'?
import SwiftUI
struct ContentView: View {
var conductor = DrumsConductor()
@State var downPads: [Int] = []
var body: some View {
VStack(spacing: 10){
ForEach(0..<2, id: \.self) { row in
HStack(spacing: 10) {
ForEach(0..<4, id: \.self) { column in
ZStack {
/// here!
Text(self.conductor.drumSamples.map({ (i: DrumSample) -> String in i.name })[getPadId(row: row, column: column)])
.foregroundColor(Color(.white)).fontWeight(.bold)
}
}
}
}
}
}
private func getPadId(row: Int, column: Int) -> Int {
return (row * 4) + column
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
解决方案
你开始:
self.conductor.drumSamples.map({ (i: DrumSample) -> String in i.name })[getPadId(row: row, column: column)]
使其更易于阅读(不会编译@ViewBuilder
):
let index = getPadId(row: row, column: column)
self.conductor.drumSamples.map({ (i: DrumSample) -> String in
i.name
})[index]
返回一个数组,map
方括号 ( []
) 仅用于下标以获取该数组中该索引处的元素。
从您的问题中,我可以看到这getPadId(row:column:)
是基于行和列创建一个 ID。左上角Text
是 ID 0
,从左到右依次递增。这确保了每个视图都有一个唯一的 ID,这意味着Text
将显示每个视图self.conductor.drumSamples
的name
属性。
但是,创建整个数组然后获取特定索引是很浪费的。相反,请在此之前尝试:
Text(self.conductor.drumSamples[getPadId(row: row, column: column)].name)
推荐阅读
- xamarin.forms - 警报管理器本地通知 - 如何取消特定通知?
- sqlite - 如何告诉从源代码编译的 Visual Studio Code 在哪里可以找到 sqlite 模块?
- javascript - 使用 VS Code Extension API 打开导入的 javascript 源文件的最佳方法是什么?
- java - Java Linked List 无法将项目添加到末尾
- android - findLastCompletelyVisibleItemPosition 返回 -1
- python - 当 .get 返回 None 时简化 if 条件
- sql - 尝试使用子查询在两个不同的列中产生 2013 年的销售额和 2012 年的销售额
- json - 为什么@RequestBody 得到一个具有空属性的对象
- graphql - 通过身份池联合的开发人员身份验证身份无法在 Amplify 项目中进行 AppSync 调用
- java - Cucumber DataTable .raw() 不再有效(io.cucumber:4.7.2)?