Swiftのクロージャーについて、分からない部分があった為、ご質問させて貰いました。
以下は、Mapkitを使用した地図アプリ作成途中のコードになります。
import UIKit import MapKit import CoreLocation class ViewController: UIViewController,CLLocationManagerDelegate ,UIGestureRecognizerDelegate { var addressString = "" @IBOutlet var longPress: UILongPressGestureRecognizer! @IBOutlet weak var settingButton: UIButton! @IBOutlet weak var mapView: MKMapView! var locManager:CLLocationManager @IBOutlet weak var addresslabel: UILabel! override func viewDidLoad() { super.viewDidLoad() settingButton.backgroundColor = .white settingButton.layer.cornerRadius = 20.0 } @IBAction func longPressTap(_ sender: UILongPressGestureRecognizer) { if sender.state == .began{ //タップ開始 }else if sender.state == .ended{ //タップ終了 //タップした位置を指定して、MKMapView上の緯度、経度を取得する //緯度、経度から住所に変換する let tapPoint = sender.location(in: view) //タップ位置 //(CGPoint)を指定して、MKMapView上の緯度経度を取得する let center = mapView.convert(tapPoint, toCoordinateFrom: mapView) let lat = center.latitude let log = center.longitude convert(lat: lat,log: log) } func convert(lat:CLLocationDegrees,log:CLLocationDegrees){ let geocoder = CLGeocoder() let location = CLLocation(latitude: lat, longitude: log) //クロージャー geocoder.reverseGeocodeLocation(location) { (placeMark, error) in if let placeMark = placeMark{ if let pm = placeMark.first{ if pm.administrativeArea != nil || pm.locality != nil{ self.addressString = pm.name! + pm.administrativeArea! + pm.locality! }else{ self.addressString = pm.name! } self.addresslabel.text = self.addressString } } } } } }
疑問点は主に、以下の部分です。
geocoder.reverseGeocodeLocation(location) { (placeMark, error) in if let placeMark = placeMark{ if let pm = placeMark.first{ if pm.administrativeArea != nil || pm.locality != nil{ self.addressString = pm.name! + pm.administrativeArea! + pm.locality! }else{ self.addressString = pm.name! } self.addresslabel.text = self.addressString } } }
geocorderのreverseGeocodeLocation(location)
メソッドが呼ばれた際の次にクロージャの記述がありますが、reverseGeocodeLocation
メソッドの引数内にクロージャが指定されている訳ではありません。
クロージャについてはQiitaの記事を読んだのですが、上記の場合、「イコール」で代入されている訳でもありません。
どのような仕組みでクロージャが実行されているか分からない為、こちらの部分につきまして、ご助言頂けましたら幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/28 01:56
2019/11/29 07:24
2019/11/29 07:27