swift tailing Clouser テーリングクロージャ-(末尾のクロージャー)
関数の最後の引数としてクロージャ式を関数に渡す必要があり、クロージャ式が長い場合は、代わりに末尾のクロージャとして記述すると便利です。
それを テーリングクロージャー と言います。 末尾のクロージャはまだ関数の引数ですが、関数呼び出しの括弧の後に末尾のクロージャを記述します。
末尾のクロージャ構文を使用する場合、関数呼び出しの一部として最初のクロージャの引数ラベルを記述しません。
関数呼び出しには、複数の末尾のクロージャを含めることができます。
関数定義:フォトギャラリーを読み込む関数
completionのあとに2つのクロージャーが呼ばれている
1つは (Picture)->Void 2つ目は onFailure: () -> Void
func loadPicture(from server: Server, completion: (Picture) -> Void, onFailure: () -> Void) { //画像が取得できた場合の処理 if let picture = download("photo.jpg", from: server) { completion(picture) } else { //画像が取得できなかった場合の処理 onFailure() } }
上記関数の呼び出し
1つめの引数は通常通り記載します。その他のクロージャー引数は、1度関数を閉じて {
からクロージャーを記載します。
loadPicture(from: someServer) { picture in //関数定義でpictureがあることは、担保されている=>後述で説明 someView.currentPicture = picture //失敗したときの処理 } onFailure: { print("Couldn't download the next picture.") }
関数定義での、画像データの担保について
バインディングという if let を使います
//画像が取得できた場合の処理 if let picture = download("photo.jpg", from: server) {
if let picture = "your_variable"{
//your_variableに値があったら pictureに詰め込む なかったら else以下を実行
参考にさせていただきました。 Closures — The Swift Programming Language (Swift 5.3)