趣味でIOSアプリ開発をかじっていた自分が、改めてSwiftを勉強し始めた際に、曖昧に理解していたところや知らなかったところをメモしています。
参考文献
この記事は以下の書籍の情報を参考にして執筆しました。
if-let文
if-letでunwrapするときに複数の変数を指定できる
var hoge: String? = "hoge"
var fuga: String? = "fuga"
if let h = hoge, let f = fuga {
print("nilじゃないよ")
}
guard文
guardの後に宣言した条件を満たさない場合、else節の処理を実行
func hogehoge() {
//let hoge: String? = "hoge"
let hoge: String? = nil
guard hoge == nil else{
//guardの条件じゃ無いなら下記の文が実行される。この場合nilじゃ無いなら実行
print(hoge!)
return
}
print(hoge) //nil
return
}
hogehoge()
nil合体演算子
ある変数がnilだった場合に別の値をセットしたいとき
let hoge: String? = nil
print(hoge ?? "hogehoge") //hogeの値がnilなら"hogehoge"を使う
有値オプショナル型
let hoge: String! = "hoge"
let fuga: String? = "fuga"
let message1:String = hoge
let message2:String = fuga // error unwrapしないといけない
有値オプショナル型はコンパイラが値の評価の時に特別扱いするだけで、オプショナル型と変わらない。
let message3:String! = fuga
let message4:String? = hoge
失敗のあるイニシャライザ
初期化に失敗した場合return nilをして処理を修了できる。
struct Hoge {
var hoge: String
init?(hoge: String?) {
guard let h = hoge else{
return nil
}
self.hoge = h
}
}
let fuga = Hoge(hoge: nil)
if let f = fuga{
print(fuga!.hoge)
} else {
print(fuga) // nil
}