SwiftUIのPickerで負の値を選択できるようにする方法です。
例えば単純にこのようなプログラムを書いた場合、Pickerに表示される数字は-100から100が設定されますが、肝心の変数(pickedX)にはインデックスとして0から200の数字が順に割り振られてしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import SwiftUI struct xdouble: View { @State private var pickedX:Int = 0 var body: some View { GeometryReader{ geometry in VStack{ Text("X") Picker(selection: self.$pickedX, label: Text("x")){ ForEach(-100..<100){ _x in Text("\(_x)") } } .frame(maxWidth: geometry.size.width / 2) .clipped() Text("\(self.pickedX)") //debug view } } } } struct xdouble_Previews: PreviewProvider { static var previews: some View { xdouble(x: .constant(0)) } } |
このような場合、ForEachのプロパティにidを設定することで、これらの値を一致させることができます。
1 2 3 4 |
ForEach(-100..<100, id:\.self){ _x in Text("\(_x)") } |