ファイルのダウンロードや画像処理の関数はSwiftで用意されていますが、いずれも非同期でcompletionHandler(=クロージャ、コールバック関数)をパラメータに取るものが多いです。
以下はクロージャを使った非同期処理の例です。地図のスナップショットを撮影する関数を作成しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//引数がクロージャになっています func takeSnapshot(completion: @escaping (UIImage?) -> ()){ //位置情報が取得できていなかったらリターン guard let loc = loc else { completion(nil) return } let center = loc.coordinate let span = MKCoordinateSpan(latitudeDelta: delta, longitudeDelta: delta) let options = MKMapSnapshotter.Options() options.region = MKCoordinateRegion(center: center, span: span) options.size = CGSize(width: 320.0, height: 320.0) let snapshotter = MKMapSnapshotter(options: options) snapshotter.start(completionHandler: {(snapshot, error) in if(error != nil){ completion(nil) return } guard let image = snapshot?.image else { completion(nil) return } completion(image) }) } |
スナップショットを撮影するMKMapSnapshotterのstartはクロージャをパラメータに取ります。
クロージャをパラメータにしている関数を呼び出す関数自身もクロージャを引数にすると、エラーが発生した場合はcompletionでnilを返すことができます。