Swift初心者です。
現在、書籍を利用してアプリ開発の為の学習をしております。
以下のエラーが発生したのですが、その解決策を教えて頂きたいです。
また、書籍では
「MapView.swift」のファイルに「let mapType: MKMapType」を追加するとエラーが解消される。と記載があるのですが、特に変らない状態です。
【解決の為にしたこと】
・スペルの書き間違いがないか確認
・書籍を読み直し、コードの記述漏れがないか確認
・エラー文章をコピペして検索
・書籍の内容に関する記事を検索
と、同じような箇所でエラーが出た人がいて記事に残していないかを探したりもしましたが分かりません。
また、エラー内容をコピペしても何を意味している内容なのかが理解できていない状態です。
以下、コード内容です。
ContentView.swift
1import SwiftUI 2import MapKit 3 4struct ContentView: View { 5 6 // 入力中の文字列を保持する状態変数 7 @State var inputText: String = "" 8 // 検索キーワードを保持する状態変数 9 @State var dispSearchKey: String = "" 10 // マップ種類の最初は標準から 11 @State var dispMapType: MKMapType = .standard 12 13 var body: some View { 14 //垂直にレイアウト (縦方向にレイアウト) 15 VStack { 16 //テキストフィールド(文字入力) 17 TextField("キーワード", text: $inputText, prompt: Text("キーワードを入力してください")) 18 //入力が完了されたとき 19 .onSubmit { 20 //入力が完了したので検索キーワードに設定する 21 dispSearchKey = inputText 22 } 23 // 余白を追加 24 .padding() 25 26 // 奥から手前方向にレイアウト (右下基準で配置する) 27 ZStack(alignment: .bottomTrailing) { 28 //マップを表示 29 MapView(searchKey: dispSearchKey, MapType: dispMapType) 30 31 //マップ種類切り替えボタン 32 Button(action: { 33 // mapTypeプロパティ値をトグル 34 //標準 → 航空写真 → 航空写真+標準 35 // → 3D Flyover → 3D Flyover+標準 36 // → 交通機関 37 if dispMapType == .standard { 38 dispMapType = .satellite 39 } else if dispMapType == .satellite { 40 dispMapType = .hybrid 41 } else if dispMapType == .hybrid { 42 dispMapType = .satelliteFlyover 43 } else if dispMapType == .satelliteFlyover { 44 dispMapType = .hybridFlyover 45 } else if dispMapType == .hybridFlyover { 46 dispMapType = .mutedStandard 47 } else { 48 dispMapType = .standard 49 } 50 51 }) { 52 //マップアイコン表示 53 Image(systemName: "map") 54 .resizable() 55 .frame(width: 35.0, height: 35.0, alignment: .leading) 56 } //Button ここまで 57 // 右の余白を20空ける 58 .padding(.trailing, 20.0) 59 // 下の余白を30空ける 60 .padding(.bottom, 30.0) 61 } // ZStack ここまで 62 63 } // VStack ここまで 64 } 65} 66 67struct ContentView_Previews: PreviewProvider { 68 static var previews: some View { 69 ContentView() 70 } 71} 72
MapView.swift
1import SwiftUI 2import MapKit 3 4struct MapView: UIViewRepresentable { 5 6 //検索キーワード 7 let searchKey: String 8 9 //マップ種類 10 let mapType: MKMapType 11 12 //表示する View を作成するときに実行 13 func makeUIView(context: Context) -> MKMapView { 14 //MKMapViewのインスタンス作成 15 MKMapView() 16 }// makeUIView ここまで 17 18 // 表示した View が更新されるたびに実行 19 func updateUIView(_ uiView: MKMapView, context: Context) { 20 21 //入力された文字をデバックエリアに表示 22 print(searchKey) 23 24 //マップ種類の設定 25 uiView.mapType = mapType 26 27 // CLGecoderインスタンスを取得 28 let geocoder = CLGeocoder() 29 30 //入力された文字から位置情報を取得 31 geocoder.geocodeAddressString( 32 searchKey , 33 completionHandler: { (placemarks, error) in 34 //リクエストの結果が存在し、1件目の情報から位置情報を取り出す 35 if let unwrapPlacemarks = placemarks , 36 let firstPlacemark = unwrapPlacemarks.first , 37 let location = firstPlacemark.location { 38 39 //位置情報から緯度経度をtargetCoordinateに取り出す 40 let targetCoordinate = location.coordinate 41 42 //緯度経度をデバックエリアに表示 43 print(targetCoordinate) 44 45 // MKPointAnnotationインスタンスを取得し、ピンを生成 46 let pin = MKPointAnnotation() 47 48 // ピンを置く場所に緯度経度を設定 49 pin.coordinate = targetCoordinate 50 51 //ピンのタイトルを設定 52 pin.title = searchKey 53 54 // ピンを地図に置く 55 uiView.addAnnotation(pin) 56 57 //緯度経度を中心にして半径500mの範囲を表示 58 uiView.region = MKCoordinateRegion( 59 center: targetCoordinate, 60 latitudinalMeters: 500.0, 61 longitudinalMeters: 500.0) 62 63 } // if ここまで 64 65 }) // geocoder ここまで 66 67 }// updataUIView ここまで 68 69} // MapView ここまで 70 71struct MapView_Previews: PreviewProvider { 72 static var previews: some View { 73 MapView(searchKey: "東京タワー", mapType: .standard) 74 } 75} 76
回答1件
あなたの回答
tips
プレビュー