Swiftで完了ハンドラを省略しよう!

Swiftはシンプルでより英文に近い読みやすい言語として登場しました。中でも最後のクロージャを変形(Trailing Closure Syntax)できるのが気に入っています。

let action = UIAlertAction(title: "OK", style: .default, handler: { (action: UIAlertAction) in
})

↓↓↓

let action = UIAlertAction(title: "OK", style: .default) { action in
}

末尾の閉じカッコをハンドラの手前に持ってきてカンマと引数ラベルを省略できます。読みやすいですね。

ちなみにカッコの中に引数がなければカッコも不要。更に最後のハンドラが不要な場合はごっそり省略できます。

vc.dismiss(animated: true, completion: nil)
UIAlertAction(title: "OK", style: .default, handler: nil)
UIApplication.shared.open(url, options: [:], completionHandler: nil)

↓↓↓

vc.dismiss(animated: true)
UIAlertAction(title: "OK", style: .default)
UIApplication.shared.open(url)

どう宣言されているか見てみると、ハンドラに初期値が設定してあるんですね。

convenience init(title: String?, style: UIAlertAction.Style, handler: ((UIAlertAction) -> Void)? = nil)

シンプルがモットーのアップルさん、さすがです。