首页 > 解决方案 > 将滑块值保存到数组 SwiftUI

问题描述

struct MyNode : Identifiable {
    var id: UUID
    var weight: Double
    
    init( weight: Double ) {
        self.id = UUID()
        self.weight = weight
        
    }
}

struct MyNodeView : View {
    @State var myNode : MyNode
    var body: some View {
        HStack {
            Text("\(String(format: "%.f", myNode.weight))%").font(.footnote)
            Slider(value: $myNode.weight, in: 0 ... 100)
        }
    }
    
}

以上是我创建滑块视图的地方,因此我可以在 ForEach 循环中动态制作滑块。所以我有一组大约 5 个滑块,并且想将所有值保存到一个数组中。所以 [50, 60, 70, 80, 90] 对于每个对象。有没有办法将这些值保存到数组中。

            Group {
                Text("Other defensive layers").fontWeight(.bold).foregroundColor(lightGray).padding(.vertical).padding(.leading, 30).font(.system(size: 15))
                HStack {
                    VStack {
                        ForEach(defensiveLayers, id: \.self) { layer in
                            let node = MyNode(weight: 0)
                            HStack {
                                Text(layer).font(.custom("Gill Sans", size: 12)).padding(.trailing).foregroundColor(.gray)
                                MyNodeView(myNode: node)
                            }
                        }
                    }
                }.padding(.horizontal, 30)
            }

标签: swiftui

解决方案


使用模型数组MyNode并使用@Binding.

这是演示代码。

struct MyNodeView : View {
    @Binding var myNode : MyNode
    var body: some View {
        HStack {
            Text("\(String(format: "%.f", myNode.weight))%").font(.footnote)
            Slider(value: $myNode.weight, in: 0 ... 100)
        }
    }
}

struct SwiftUIDEMO: View {
    
    @State private var defensiveLayers: [MyNode] = (0..<5).map { _ -> MyNode in
        MyNode(weight: 0)
    }
    
    var body: some View {
        VStack {
            ForEach(defensiveLayers.indices, id: \.self) { index in
                MyNodeView(myNode: $defensiveLayers[index])
            }
        }
    }
}

推荐阅读