Swift UI MapKit 忘備録

point

  • UIViewRepresentableを継承
  • デリケートメソッド?を2つ用意する

makeUIView インスタンス生成時

  
    func makeUIView(context: Context) ->  MKMapView {
        MKMapView()
    }

updateUIView Viewの更新時

    func updateUIView(_ uiView: MKMapView, context: Context) {

f:id:happy_teeth_ago:20210507133700p:plain

他のViewから呼び出すときの注意点 $で変数を用意

${変数} は状態管理が可能

f:id:happy_teeth_ago:20210507133915p:plain

TextFieldのような以前デリゲートが用意されていた者は、@Stateで置き換えてくれる様になった。かなり便利

呼び出し側 はクラスのインスタンスを作るだけ

struct ContentView: View {
    
    @State var inputText:String = ""
    
    @State var dispSearchKey:String = ""
    
    var body: some View {
  
        VStack{
            TextField("キーワード",
                      text: $inputText, onCommit: {
                        dispSearchKey = inputText
                      })
                .padding()
            
            //MAPの呼び出し たったのこれだけ、下記参照
            MapView(searchKey: dispSearchKey)
            
            
        }
    }
}

MapView(searchKey: dispSearchKey)での呼び出しでMapViewクラスのこの箇所が呼ばれる

当然hiroshimaは呼び出し時に上書きされる

struct MapView_Previews: PreviewProvider {
    static var previews: some View {
        MapView(searchKey: "hiroshima")
    }
}