Swift のオプショナル型について、自分なりにまとめました。
サンプルコードでは、下記のようなクラス定義のインスタンス user
を使った例を記しています。 Swift4 で試しているはずです。
class User {
var name: String?
}
?
をつけて扱う
user.name?.count
これだと count も Int? になるので、その後も延々と Optional として扱う必要がある
!
をつけて扱う
user.name!
!
は開示指定と呼ぶ。
万が一 name にデータが入っていないい時は実行時エラーが出る覚悟の時。
??
でデフォルトの値を指定してあつかう
user.name ?? "Unknown name"
??
は nil 合体演算子と呼ぶ。
if
/ while
/ guard
文で Optional じゃない変数に入れて扱う
guard let name = user.name else {
// return とか break とか throw とか
}
name.count
if と while では、そのスコープ内で変数を利用できる。オプショナル束縛と呼ぶ。
guard 文では、後続の文でも変数を利用できる。kotlin の let も嫌いじゃないけど、顧客の求めていたもの感はこの guard 文のほうが大きい。 guard 便利