首页 > 解决方案 > 方括号 [ ] 在这个 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()
    }
}

标签: iosswiftswiftui

解决方案


你开始:

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.drumSamplesname属性。

但是,创建整个数组然后获取特定索引是很浪费的。相反,请在此之前尝试:

Text(self.conductor.drumSamples[getPadId(row: row, column: column)].name)

推荐阅读