Optional pattern을 보다가 생소한 문법을 발견했다
let someOptional: Int? = 42
// Match using an enumeration case pattern.
if case .some(let x) = someOptional {
print(x)
}
옵셔널은 enum타입으로 구현되어 있는데, 이렇게 if case 문으로 한가지 case만 처리하는 신기한 문법..!
if case, guard case
enum NetworkResult {
case success(data: String)
case failure(code: Int, message: String)
case noConnection
}
let result: NetworkResult = .failure(code: 404, message: "Not Found")
// if case
if case .noConnection = result {
print("네트워크 연결 없음")
} else {
print("연결 상태 OK") // 이 줄이 실행됩니다.
}
// guard case
func handle(_ r: NetworkResult) {
guard case .success = r else {
print("성공이 아니므로 함수 종료")
return
}
print("성공 케이스, 계속 처리") // 이 줄은 실행되지 않음
}
handle(result)
if case let, guard case let
let 사용해 연관값 바인딩
// if case let
if case let .success(data) = result {
print("데이터 수신: \(data)")
} else {
print("성공 케이스가 아닙니다") // 이 줄이 실행됩니다.
}
// guard case let
func process(_ r: NetworkResult) {
guard case let .failure(code, message) = r else {
print("실패 케이스가 아니므로 다른 처리")
return
}
print("실패 코드: \(code), 메시지: \(message)") // 이 줄이 실행됩니다.
}
process(result)
✅ Optinal pattern
let someOptional: Int? = 42
// Match using an enumeration case pattern.
if case .some(let x) = someOptional {
print(x)
}
// Match using an optional pattern.
if case let x? = someOptional {
print(x)
}
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 ~ 으로 쓰면 반복문이 5번 실행되는데 반해,
위와 같이 Optinal pattern을 사용하면 값이 nil일땐 반복문을 실행하지 않아 반복문이 3번만 실행된다
'Swift' 카테고리의 다른 글
[WWDC] ARC in Swift (0) | 2025.05.30 |
---|---|
Struct 접근제어와 Memberwise Initializers (0) | 2025.05.29 |
Struct와 Class 차이(부제: 내가 SwiftUI가 어려웠던 이유) (1) | 2025.05.27 |
[Swift] COW 동작 원리 (0) | 2025.05.26 |
[Swift]Optional을 사용하는 이유 (0) | 2025.05.19 |