Optional Pattern

작성일

Optional Pattern

if a == nil {

}
// 위아래 코드가 같다
if a == .none {

}

if a == 0 {

}
// 위아래 코드도 같다.
if a == .some(0) {

}

이를 활용해서 보면,

let a: Int? = 0
let b: Optional<Int> = 0

if case let x? = a{
  print(x) // "0\n"
}

a상수에 값이 저장되어 있으면 x를 바인딩하여 출력하게 되고, 값이 저장되어 있지 않으면, 실행하지 않는다.

let list: [Int?] = [0, nil, nil, 3, nil, 5]

for item in in list {
  guard let x = item else { continue }
  print(x)
}

출력

0
3
5

guard문을 통해 옵셔널 바인딩을 한다.

let list: [Int?] = [0, nil, nil, 3, nil, 5]

for case let x? in list {
  print(x)
}

이렇게 위코드를 간단하게 줄일 수 있다. 자세히 보면, list가 바인딩되면 정상적으로 출력을 하고 바인딩 되지 않으면, 출력을 하지 않는다. 따라서 실행 결과는

0
3
5

로 위 코드랑 동일 하다.