【Swift】アラートを表示する（Alert／ActionSheet） 

# 開発環境
- iOS9.2
- Swift2
- Xcode7.2

# 概要
ボタンを押した時などに表示されるアラートダイアログの基本的な書き方について記述します。

# ポイント 
- UIAlertControllerを使用する
- 各ボタンはUIAlertActionクラスを使用して作成する
- アラートの表示スタイルとしてAlert／ActionSheetがある
- ボタンの表示スタイルとしてdefault／cancel／destructiveがある
- クロージャ（closure）でボタンを押した時の処理を書く

# アラートを表示（Alert／ActionSheet） 
## 表示スタイル：Alert
ダイアログ風のアラートが表示する
### Display
<img width="375" alt="Alert_Disp.png" src="https://qiita-image-store.s3.amazonaws.com/0/79137/8652c2de-0268-4658-5d73-0ced308f3d74.png">
### Swift Code
```swift:AlertController.swift
// ボタンを押下した時にアラートを表示するメソッド
@IBAction func dispAlert(sender: UIButton) {
    
    // ① UIAlertControllerクラスのインスタンスを生成
    // タイトル, メッセージ, Alertのスタイルを指定する
    // 第3引数のpreferredStyleでアラートの表示スタイルを指定する
    let alert: UIAlertController = UIAlertController(title: "アラート表示", message: "保存してもいいですか？", preferredStyle:  UIAlertControllerStyle.Alert)
    
    // ② Actionの設定
    // Action初期化時にタイトル, スタイル, 押された時に実行されるハンドラを指定する
    // 第3引数のUIAlertActionStyleでボタンのスタイルを指定する
    // OKボタン
    let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:{
        // ボタンが押された時の処理を書く（クロージャ実装）
        (action: UIAlertAction!) -> Void in
        print("OK")
    })
    // キャンセルボタン
    let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertActionStyle.Cancel, handler:{
        // ボタンが押された時の処理を書く（クロージャ実装）
        (action: UIAlertAction!) -> Void in
        print("Cancel")
    })
    
    // ③ UIAlertControllerにActionを追加
    alert.addAction(cancelAction)
    alert.addAction(defaultAction)
    
    // ④ Alertを表示
    presentViewController(alert, animated: true, completion: nil)
}
```
## 表示スタイル：ActionSheet
画面下部から出てくるアラートが表示する
### Display
<img width="375" alt="ActionSheet_Disp.png" src="https://qiita-image-store.s3.amazonaws.com/0/79137/d2ad3604-d7c0-ad94-767b-d5a72881e0c5.png">
### Swift Code
UIAlertControllerクラスのインスタンス生成時に、第3引数のpreferredStyleにActionSheetを指定する。（その他のコードは「表示スタイル：Alert」と同じ）

```swift:AlertController.swift
let alert: UIAlertController = UIAlertController(title: "アラート表示", message: "保存してもいいですか？", preferredStyle:  UIAlertControllerStyle.ActionSheet)
```
## ボタンのスタイルについて
以下の3タイプが指定できる

| UIAlertActionStyle | 説明 |
|:-----------|:-----------|
|default|文字：標準／複数指定可|
|cancel|文字：ボールド／複数指定不可／最下部に位置固定|
|destructive|文字：赤文字／複数指定可|
### Display（表示スタイル：Alert）
![Alert_Button.jpg](https://qiita-image-store.s3.amazonaws.com/0/79137/3d3bf882-0652-fe7a-337b-d2f86aee730c.jpeg)
### Display（表示スタイル：ActionSheet）
![ActionSheet_Button.jpg](https://qiita-image-store.s3.amazonaws.com/0/79137/3f151b1d-2d9e-cc41-a862-113cd5649c5d.jpeg)
### Swift Code
```swift:
// Defaultボタン
let defaultAction_1: UIAlertAction = UIAlertAction(title: "default_1", style: UIAlertActionStyle.Default, handler:{
    (action: UIAlertAction!) -> Void in
    print("defaultAction_1")
})
let defaultAction_2: UIAlertAction = UIAlertAction(title: "default_2", style: UIAlertActionStyle.Default, handler:{
    (action: UIAlertAction!) -> Void in
    print("defaultAction_2")
})

// Cancelボタン
let cancelAction: UIAlertAction = UIAlertAction(title: "cancel", style: UIAlertActionStyle.Cancel, handler:{
    (action: UIAlertAction!) -> Void in
    print("cancelAction")
})

// Destructiveボタン
let destructiveAction_1: UIAlertAction = UIAlertAction(title: "destructive_1", style: UIAlertActionStyle.Destructive, handler:{
    (action: UIAlertAction!) -> Void in
    print("destructiveAction_1")
})
let destructiveAction_2: UIAlertAction = UIAlertAction(title: "destructive_2", style: UIAlertActionStyle.Destructive, handler:{
    (action: UIAlertAction!) -> Void in
    print("destructiveAction_2")
})
```
## ボタンアクションはクロージャ（closure）で処理
### Swift Code
```swift:AlertController.swift
let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:{
    // ボタンが押された時の処理を書く（クロージャ実装）
    (action: UIAlertAction!) -> Void in
    print("OK")
})
```
今回は単純に、ボタンが押された時"OK"という文字列をコンソールに出力します。
また別の機会にクロージャについては書ければと思ってますが、最低限だけ触れておくと、クロージャとは、一言で言えば「名無しの関数式」のことであり、基本的な書き方は以下となります。

```swift:
{(引数: 引数の型) -> (戻り値の型) in
    // 処理
}
```