패턴 매칭
//옵셔널 값이 있을 때
let someOptional: Int? = 42
//이렇게 바인딩이 가능합니다.
if case .some(let x) = someOptional {
print(x)
}
//왜 ?
//옵셔널이 아래와 같이 구현되어 있기 때문이죠.
enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
}//이런식으로도 바인딩이 가능한데요.
if case let x? = someOptional {
print(x) //42
}
//이것과는 뭐가 다를까요 ?
//사실 이것과는 다를게 없습니다.
if let x = someOptional {
print(x) //42
}
//그런데, 아래와 같은 for 문에서의 case? 문법이 지원되지요.
let arrayOfOptionalInts: [Int?] = [nil, 2, 3, nil, 5]
// Match only non-nil values.
for case let number? in arrayOfOptionalInts {
print("Found a \(number)")
//Found a 2
//Found a 3
//Found a 5
}
//위의 문법을 사용하지 않는다면 이런식으로 작업해야겠죠.
for number in arrayOfOptionalInts.compactMap({ $0 }) {
print("Found a \(number)")
}Last updated