2016-08-05 5 views
0

UIAlertActionのハンドラを書く方法は3つあります。以下のそれぞれは、私が望む同じ/期待されることをするようです。正しい方法UIAlertActionのハンドラを作成する

// 1. 
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: {(action: UIAlertAction!) -> Void in 
    print("a") 
}) 

// 2. 
let okAction = UIAlertAction(title: "OK", style: .Default, handler: { (action: UIAlertAction!) in 
    print("b") 
}) 

// 3. 
let okAction = UIAlertAction(title: "OK", style: .Default) { (action) in 
    print("c") 
} 

// OUTPUT: 
// a 
// b 
// c 

これらはすべてハンドラを作成していますか?どのような違いがあり、使用するのがベストですか?

+0

のように、このリンクはhttp://stackoverflow.com/questions/24190277/writing-handler-for-uialertaction – gurmandeep

+0

@gurmandeep感謝を助けるべきであることを言及する必要があります。私はまだ3が最高だと理解したいと思っています。それらの間の違いはすべて – rdk

+0

です。私は@Joeyに同意します。詳細はhttps://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAlertAction_Class/ – gurmandeep

答えて

2

これらはすべて同じですが、主に好みの構文スタイルの問題です。オプション3では、型推論と末尾のクロージャの構文が使用されます。これは一般的には簡潔で、関数呼び出しの外側で最後の引数クロージャを移動するときに余分な括弧を取り除きます。 actionのかっこを削除してオプション3を選択することもできますが、どちらも必要ありません。

この詳細については、Swift Programming Languageの書籍で説明しています。クロージャに関するセクションを参照してください。

0

すべて同じです。 swiftは厳密に型指定された言語なので、アクションをUIAlertActionと定義する必要はありません。coz UIAlertActionのinitメソッドではUIAlertActionと定義されています。 配列から値を取得するときにカスタムクラスを持つ配列を定義する場合と同じように、ObjectiveCのようにキャストする必要はありません。

上記の3つの方法は問題ありません。私の好みのために:

また、返品タイプがないので、Void(返品タイプ)も言及する必要はありません。それは戻り値の型を持っている場合は、param -> RetType in

method { param -> String in 
     return "" // should return a String value 
} 
関連する問題