Xcode 6.3 betaから触ってるひとには今更感ありありですが^^;
サンプル
class HogeHogeViewController {
var textField: UITextField?
var button: UIButton?
...
func event() {
...
}
}
例として、Optional型でtextFieldとbuttonを保持していて、event()が実行された時に、それぞれの状態をチェックしたい的な状況
1.2以前
func event() {
if let textField = self.textField {
if textField.isFirstResponder() {
if let button = self.button {
if button.enabled {
// Do something
}
}
}
}
}
Optional Bindingでアンラップしようとするとネストのお化けに・・・
もしくは、
func event() {
if self.textField != nil && self.textField!.isFirstResponder() &&
self.button != nil && self.button!.enabled {
// Do something
}
}
こう書けばネストは無くせるけど、自分でnilチェックしてから暗黙的アンラップ(!)っていうのがなんか強引な気がしないでもない
Swift 1.2
- 一つのif文内で、複数変数がOptional Bindingが可能
- where句をつかってBindされた変数に対して評価が可能
という改善がされたので、以下のように(個人的には)スマートに書けるようになった模様
func event() {
if let textField = self.textField, let button = self.button where textField.isFirstResponder() && button.enabled {
// Do something
}
}
蛇足
例のために1個のifにまとめたけど、whereで2つの条件をチェックしてるのは詰め込み過ぎに感じるので
func event() {
if let textField = self.textField where textField.isFirstResponder() {
if let button = self.button where button.enabled {
// Do something
}
}
}
2つに分けるほうが好み