ファイルのダウンロードや画像処理の関数はSwiftで用意されていますが、いずれも非同期でcompletionHandler(=クロージャ、コールバック関数)をパラメータに取るものが多いです。
以下はクロージャを使った非同期処理の例です。地図のスナップショットを撮影する関数を作成しています。
//引数がクロージャになっています 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を返すことができます。