Swiftのはてな記号とびっくりまーく記号について調べてみました。
SwiftのOptional型について
上の記号はOptional型という物に深く関連しています。
Optional型とはnilを許可する型の事です。
分かりやすく言うとはてなが付いているものはOptional型、ついてない場合は非Optional型です。
let a: Int? // これはOptional型 let b: Int // これは非Optional型
実際に下のように非Optional型にnilを入れようとするとエラーになります。
let a: Int? = nil // これは大丈夫 let b: Int = nil // これはエラーになる
変数についているびっくりまーくは何か?
これはアンラップと言って、Optional型を非Optional型にしています。
通常は非Optional型にOptional型の値を代入する事はできません。
しかしOptional型の変数でもビックリマークを付ける事で非Optional型へ代入ができるようになります。
let a: Int? = 1 let b: Int = a // これはエラー let c: Int = a! // これは大丈夫
逆は問題なく動きます。
let a: Int = 1 let b: Int? = a // これは大丈夫
代入だけでなく、メソッドの引数も同様です。
func b(value: Int) { print(value) } let a: Int? = 1 b(a!) // ビックリマークを付ける事で代入可能
変数に付いているはてなマーク
はてなマークは、Optional型の変数のメソッドを呼び出す時に使います。
Optional型の変数のメソッドを呼び出す際は ! か ? が必須になります。
?を付けた場合は変数がnilの場合に返り値がnilになり、!を付けた場合は変数がnilの時にエラーになります。
class A { func method() -> String { return "AA" } } let a: A? = A() a.method() // これはエラー、!か?を付ける必要がある a!.method() // これは大丈夫、ただしaがnilの時にエラーになる a?.method() // これも大丈夫、aがnilの時は戻り値がnilになる
まとめ
Optional型は最初は法則が掴めずに悩むのですが、一度覚えると非常に簡単でした。