💡

【Day5】SwiftUIセクション2で大苦戦!でも確実に一歩前進した話

に公開

はじめに

こんにちは、やすです。

今日はApple公式チュートリアルの**セクション2(Building Lists and Navigation)**に取り組みました。…が、正直に言うと、かなり詰まりました。でも、詰まったからこそ得られた学びもあったので、それをしっかり記録しておこうと思います。

同じように初心者から始めて、
「え、チュートリアルでこんなに時間かかるの俺だけ…?」
と思ってる人にこそ届いてほしい内容です。


今日の学習範囲

  • セクション2のリスト表示(List)とナビゲーション(NavigationSplitView)
  • @StateIdentifiableの使い方
  • Previewとシミュレータのズレの調整

大きく詰まったポイントと解決まで

① constant()じゃダメなの?事件

Map(initialPosition: .constant(region)) と書いたところで、
Mapがバインディング(Binding)を期待しているのに、constantで渡していたことに気づかず、エラー。

原因: Mapの初期化子が Binding<MKCoordinateRegion> を要求していたのに、constant() を使って固定値として渡してしまっていた。

解決:
@State private var region = MKCoordinateRegion(...) を使って、

Map(position: $region)

という形に変更。これで双方向に反応するように!


② Previewで地図が表示されない問題

Previewで地図が真っ白で表示されず焦る。
調べてみると、シミュレータ上でないと地図がうまく表示されないことがあると分かって安心。

解決: Previewでダメなときは素直にiOSシミュレータに切り替えて確認。


③ LandmarkListとLandmarkDetailの接続エラー

LandmarkDetail(landmark: landmarks[0]) と書いてるのに、プレビューが真っ白。

原因: Landmark型がIdentifiableに準拠していなかった(idプロパティがあるだけでは足りなかった)

解決: struct Landmark: Identifiable に書き換え。チュートリアルにも書いてあったけど、ちゃんと読んでなかった…


得られたこと

  • @StateBindingの違いをようやく理解できた。
  • View間でデータを渡すときの型やプロトコルの扱いが少し分かってきた。
  • Previewが全てじゃない。うまく動かないときはシミュレータで確認すること。

明日以降の方針

  • 明日はセクション3以降に進む前に、今日のコードをすべてノートにまとめる予定
  • 特にList表示、NavigationSplitView、Previewの仕組みは徹底的に復習
  • SwiftUIの型やプロトコルへの理解を深める(CodableやIdentifiableなど)

おわりに

正直、チュートリアルって「簡単に進めるもの」だと思ってたけど、
やってみたらガチで難しい

でも、わからなかったことを自分の言葉で書き残すことで、知識が少しずつ積み上がってきてる実感がある。

センスとか関係なく、「やったか・やってないか」だけ。

明日もやるぞ。

Discussion