mono0926
11/30/2016 - 11:50 AM

nil.swift

class MyClass {
    var value: Int?

    // nilである時に呼び出されることを普通に想定しているならこんな感じ
    func someMethod1() {
        guard let value = value else {
            return
        }
        print(value)
    }
    // nilである時に呼び出されるのが想定外ならこんな感じ(デバッグ環境でのみクラッシュ)
    func someMethod2() {
        guard let value = value else {
            assert(false)
            return
        }
        print(value)
    }
    // nilである時に呼び出されえ後続の処理が続行されるのがマズイならこんな感じ(リリース環境でもクラッシュ)
    func someMethod3() {
        guard let value = value else {
            fatalError()
            return
        }
        print(value)
    }
    // ?を用いてオプショナルチェーンするのも、このパスではnilでもOKという明確な意図が無いと良くないと思っている(個人的には滅多に使わない)
    func someMethod4() {
        print(value?.description)
        
        // 以下も、基本的にはオプショナルチェーン使わずに初期化時にnilの考慮したり`!`アクセスしたりするべき
        let url = URL(string: "http://qiita.com/mono0926")
        print(url?.path)
    }
}