LoginSignup
0
1

More than 1 year has passed since last update.

swift optional型 まとめ

Last updated at Posted at 2021-02-28

はじめに

swiftのoptional型の基礎について学んだので,簡単にメモしました.

1. Force Unwrapping (optional!)

強制的にunwrapしてoptional型からvalueを取り出す.nilが絶対入らない場合に利用.

let myOptional: String?
myOptional = "hello"
let text: String = myOptional!

ただし,仮にnilが入ってしまってエラーになった時,複数のコードやファイルが存在した場合,その原因を見つけるのが大変になり,安全でない. → 2. Check for nil Valueを利用.

2. Check for Nil Value (if optional != nil {optional!})

  1. Force Unwrappingより安全なアンラッピング.if文でnilか否か条件分岐.
let myOptional: String?
myOptional = nil
if myOptional != nil {
    let text: String = myOptional! //この部分が冗長
} else {
    print("myOptional was found to be nil.")
}

ただし,nil出ない時にも!を付けないといけないのは少し冗長. → 3. Optional Bindingを利用.

3. Optional Binding(if let safeOptional = optional {safeOptional})

以下のコードを例に,myOptionalがnilでなかったら,定数safeOptionalに代入.
これにより,if文内で!をつける必要がなくなる.

let myOptional: String?
myOptional = nil
//myOptional = "hello"
if let safeOptional = myOptional {
    let text: String = safeOptional
    print(text)
} else {
    print("myOptional was found to be nil.")
}

ただし,myOptionalがnilの時にdefault値を与えたい場合 → 4. Nil Coalescing Operatorを利用.

4. Nil Coalescing Operator(optional ?? defaultValue)

optionalがnilでない場合,その値をそのまま用いる.
optionalがnilの場合,defaultValueを用いる.

let myOptional: String?
myOptional = "good bye" // output: "good bye"
//myOptional = nil // output: "hello"
let text: String = myOptional ?? "hello"
print(text)

5. Optional Chaining(optional?.property, optional?.method())

optional型のclass or structのオブジェクトを生成した際に,Optional Chainingを利用.
optional?.property, optional?.method()で,オブジェクトがnilでない場合,property, methodにアクセスできる.

Optional Chainingなしとありの場合で比較.

Optional Chainingなしの場合(安全で無い)

オブジェクトを生成していない場合で,プロパティを取り出すために,オブジェクトをforce unwrappingするとエラー → 安全で無い

struct MyOptional {
    var property = 123
    func method() {
        print("I am the struct's method.")
    }
}

let myOptional: MyOptional? //optional型のstructのオブジェクトを定義
myOptional = nil // output: error
//myOptional = MyOptional() // output: 123
print(myOptional!.property)//optional型のオブジェクトからプロパティを取り出すためには,オブジェクトをunwrapする必要あり

Optional Chainingありの場合(安全)

optional?.property, optional?.method()で,オブジェクトがnilでない場合,property, methodにアクセスできる.

struct MyOptional {
    var property = 123
    func method() {
        print("I am the struct's method.")
    }
}

let myOptional: MyOptional? //optional型のstructのオブジェクトを定義
myOptional = nil // output: nil
//myOptional = MyOptional() // output: Optional(123)
print(myOptional?.property)// methodも同様のやり方

まとめ

optional型の理解がかなり深まりました. どんどん活用していきたいですね.

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1