ピッカーはユーザー未操作の時は値が入っていない

✅ 結論から

Picker("", selection: $selected_name) は 必ず selection が Picker 内の tag のいずれかにマッチしていないといけません
もし selected_name が初期値で ""(空文字)で、Picker の中に tag("") が存在しない場合は、選択状態が成立しません
その結果、何も選ばれていないように見える&変数に値が入らないという挙動になります。
これは 仕様 で、コードのバグではありません 👍。

🛠 対策方法

① 最初からリストの1番目を選択状態にしておく

→ これで、ユーザーが Wheel を操作しなくても 必ず最初の要素が選択される ようになります。

② 「未選択」状態を許容したい場合

もし「必ず選ばせたい」のではなく「未選択状態から始めたい」なら、Optional を使います。

→ これなら、最初は nil で、ユーザーが操作して初めて selected_name に値が入ります。

💡 まとめ

  • 初期値が Picker のタグに含まれていないと、値が入らない → 仕様
  • 必ず1つ選ばれた状態にしたいなら 初期値を favorite_list.first に設定
  • 「未選択」から始めたいなら Optional の選択肢 を使う

コメント

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