0

我对 Swift 相当陌生,我正在尝试生成元素的 HStack(将在进度条中使用)并能够使用按钮添加元素。我不确定是否应该在 ForEach(1..<Variable) 部分中使用变量或使用其他方法。这是我到目前为止的代码,但它不起作用。

struct ContentView: View {
@State var fill : CGFloat = 0

@State var NumberOfCircles : Int = 0 var body: some View {

            HStack(spacing:100) {

                ForEach(0..<NumberOfCircles){ _ in
                   MyShape()

}

        Button(action: {NumberOfCircles = 5}, label: {
            Text("Button")
            
        })
        
    }
4

2 回答 2

0

我不确定你的问题是什么,但我测试了这段代码并且它有效:

struct ContentView: View {
    @State var numberOfCircles = 1
    var body: some View {
        VStack {
            HStack {
                ForEach(0..<numberOfCircles, id:\.self) { _ in
                    Circle()
                        .frame(width: 30, height: 30)
                }
            }
            Button { numberOfCircles = 5 } label: {
            Text("Add Circles")
        }
            
        }
    }
}

顺便说一句,Swift 中变量的命名约定是 camelCase。这意味着声明一个变量你应该命名它numberOfCircles ,而不是NumberOfCircles . 第一个大写字母保留用于命名类、结构和协议。

于 2021-10-10T03:06:42.240 回答
0

ForEach在 SwiftUI 中需要一个恒定的范围来循环。但是,正如错误所暗示的那样,如果您遵守Identifiable或使用ForEach(_:id:content:)并提供明确的内容id,那就很高兴了。所以试试这个:

struct ContentView: View {
    @State var fill: CGFloat = 0
    @State var NumberOfCircles: Int = 0
    
    var body: some View {
        
        HStack(spacing: 20) {
            ForEach(0..<NumberOfCircles, id: \.self){ _ in // <-- here
                MyShape()
            }
            Button(action: {NumberOfCircles = 5}){
                Text("Button")
            }
        }
    }

}
于 2021-10-10T03:07:30.170 回答