Learn Swift / 第15章 クロージャ
このコーナーでは、Swift による、Mac OS X アプリケーションの作成方法を、説明しています。
クロージャ
クロージャ (closure ) は、関数名を記述しない、無記名な関数です。クロージャは、関数やメソッドの引数として使われます。Apple から用意されているクラスには、クロージャを引数としているメソッドが多くあります。ここでは、実際にクロージャを定義して、使い方を覚えましょう。
次のリストは、デバッグエリアに「Hello, Swift」と表示します。
import Cocoa func say(str:String, message:() -> Void) { print(str, terminator:", ") message() } say("Hello", message: { () -> Void in print("Swift")})func say(str:String, message:() -> Void) {message 引数に、() -> Void 型を指定しています。意味は、「引数がなく、戻り値もない関数」となります。引数や戻り値がない場合は、Void と記述します。引数の中に、Void と記述して、(Void) -> Void とすることもできます。また戻り値がない場合、() -> () と記述することもできます。
message()クロージャ引数 (関数型引数) の値を取り出すには、引数名() と記述します。
say("Hello", message: { () -> Void in print("Swift")})クロージャは、クロージャを引数として指定した関数を、呼び出す時に定義します。
{ () -> Void in print("Swift")}クロージャは、引数も戻り値も含めて、{ と} の間に記述します。そして、クロージャによって実行される処理は、「in」というキーワードの後に記述します。
オプショナルバインディング
クロージャを、オプショナル型として定義することもできます。オプショナル型は、値がない可能性もある型のことです。詳しくは、 第11章 コレクション の「オプショナル」節を、ご覧になってください。クロージャを、オプショナル型として指定すると、引数の値として「nil」を渡せるようになります。
次のリストは、デバッグエリアに、「Hello, 」と表示します。
import Cocoa func say(str:String, message:((Void) -> Void)?) { print(str, terminator:", ") if let msg = message { msg() } } say("Hello", message: nil)func say(str:String, message:((Void) -> Void)?) {クロージャとして指定した引数を、オプショナル型にするには、型全体を ( と ) で囲んで、最後に ? をつけます。
if let msg = message { msg() }オプショナル型として、指定されたクロージャを、「message()」などのように、記述して実行しようとするとエラーになります。もし、message クロージャが、nil だった場合には、実行できないからです。そのために、if 文で、クロージャ型引数の message に値があるかどうかを、チェックします。この「if let 定数 = オプショナル値」という構文は、「オプショナルバインディング」と呼ばれる、Swift の重要構文の一つです。
say("Hello", message: nil)引数 message に、nil を渡しています。この引数に (Void) -> Void 型のクロージャ (例えば「{ (Void) -> Void in print("Swift")}」など) を渡すことも可能です。
お疲れ様でした。
次章では、サンプルアプリとして、Web ブラウザを作ります。
無断転載禁止 Copyright 2016. vivacocoa.jp All right reserved.