Swift MkMapViewで地図アプリ作成してみた（02）- 現在位置を取得する

#記事一覧
[Swift MkMapViewで地図アプリ作成してみた（記事一覧）](https://qiita.com/rain_00_00_09/items/3151b3faf2303fe78312)

#CLLocationManagerで現在位置を取得する
1. CLLocationManagerのdelegateを登録する

    ```swift:ViewController.swift：CoreLocationをimportする
        import UIKit
        import MapKit
        import CoreLocation
    ```

    ```swift:ViewController.swift：CLLocationManagerDelegateを継承する
        class ViewController:   UIViewController,
                                CLLocationManagerDelegate {
    ```

    ```swift:ViewController.swift：CLLocationManagerのメンバ変数を定義する
            @IBOutlet var mapView: MKMapView!
            var locManager: CLLocationManager!
    ```

    ```swift:ViewController.swift：delegateを登録する
            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view, typically from a nib.
                
                locManager = CLLocationManager()
                locManager.delegate = self
    ```

2. 現在位置更新を受信する

    ```swift:ViewController.swift：現在位置更新を受信する
            func locationManager(_ manager: CLLocationManager, didUpdateLocations locations:[CLLocation]) {
                let lonStr = (locations.last?.coordinate.longitude.description)!
                let latStr = (locations.last?.coordinate.latitude.description)!
                
                print("lon : " + lonStr)
                print("lat : " + latStr)
            }
    ```
    func locationManager(_ manager: CLLocationManager, ・・・はdelegate設定すると位置が変化する度に上記の関数がCallされるオーバーライドみたいな仕組み。
    の、はずだがこのままではCallされない。
    デバッグ実行してもbreakしない。
    <img width="750" alt="locationManager.png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/22925c15-6d61-d4e9-65fd-1be27e941ee1.png">


3. そのため、位置情報の使用の許可を得る

    Info.plistで"Privacy - Location When In Use Usage Description"を追加し、Valueにデバイスに許可を得る際に表示する任意の文字列を入力する。
    <img width="750" alt="Location When In Use .png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/0014a4d3-db47-7e62-3a67-3f2e73adf093.png">

    位置情報の使用の許可を求め、許可されればCLLocationManagerの現在位置更新を開始する。

    ```swift:ViewController.swift：位置情報の使用の許可を得る
            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view, typically from a nib.
                
                locManager = CLLocationManager()
                locManager.delegate = self
                
                // 位置情報の使用の許可を得る
                locManager.requestWhenInUseAuthorization()
                if CLLocationManager.locationServicesEnabled() {
                    switch CLLocationManager.authorizationStatus() {
                    case .authorizedWhenInUse:
                        // 座標の表示
                        locManager.startUpdatingLocation()
                        break
                    default:
                        break
                    }
                }
    ```

    locManager.requestWhenInUseAuthorization()により下記のDialogが表示されるため、Allowを押す。
    <img width="750" alt="startUpdatingLocation.png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/6bc2f765-4ce3-5f9f-39a3-4503c9b6d59e.png"> 

    すると現在位置が更新される度にlocationManagerがCallされる様になる。
    一度Allowを選択するともうDialogが表示されることはない。
    <img width="750" alt="locationManager2.png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/bd1d838a-90c9-d5d1-bc83-8319bb17047e.png">

#記事一覧
[Swift MkMapViewで地図アプリ作成してみた（記事一覧）](https://qiita.com/rain_00_00_09/items/3151b3faf2303fe78312)