Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

忘備録-Swiftのオプショナル型

趣味で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
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?