Learn Swift / viva Cocoa


Learn Swift / 第15章  クロージャ


このコーナーでは、Swift による、Mac OS X アプリケーションの作成方法を、説明しています。

2016年1月25日

home  目次  前へ  次へ  mail


クロージャ

 クロージャ (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 ブラウザを作ります。  


home  目次  前へ  次へ  mail


無断転載禁止
Copyright 2016. vivacocoa.jp All right reserved.