[SwiftUI]「Picker」をForEachで作る際の注意点

SwiftUI
スポンサーリンク

注意点

Pickerの要素を動的に作りたい場合には、 ForEachが使えます。

struct ContentView: View {
    @State var selected = 0
    var body: some View {
        VStack {
            Picker(selection: $selected, label: Text("ピッカー")){
                ForEach(0..<5) {index in
                    Text("\(index)")
                }
            }
            
            Text("\(selected)")
        }
    }
}

PickerでForEachを使う場合は、Pickerの挙動が少し変わります。

普通のPickerでは、tagに設定した値が、selectionに渡されます。

ですが、ForEachの場合は、クロージャーの引数が自動的に渡されるようになっています。

ここで注意すべきなので、クロージャーの引数とselectionの値がマッチしている必要がある点です。

例えば、クロージャーの引数がインデックスなのに、selectionが文字列だと噛み合わなくなります。

なので、PickerのForEachでは、自動的に渡される値に気をつける必要があります。

まとめ

PickerでForEachを使う際は、ForEachのクロージャーの引数とPickerのselectionの値がマッチするようにしなければいけません。

クロージャーの引数とselectionの値が合わない時、予想外の挙動をする事になります。

参考 : 金田浩明「SwiftUI 徹底入門」

おすすめの記事

コメント

タイトルとURLをコピーしました