Optional type
어떤 변수가 Optional type 이라면 어떤 값을 가지거나 nil 값을 가질 수 있다. nil 은 값이 없다는 뜻이다. Optional 변수를 사용할 때는 Optional 을 해제한 뒤 사용할 수 있고, 그 값이 nil 인 경우는 해제할 수 없다.
아래의 Optional binding 을 통해 안전하게 옵셔널 값을 해제할 수 있다.
Optional binding
Optional 표현식을 평가한다. nil 이 아닌 경우 Optional 해제된 값을 저장하고 true 를 반환한다. nil 인 경우 false 를 반환한다. 아래 두 가지 방법이 있다.
1. if let
Optional 변수를 평가해 nil 이 아닌 경우 선언된 상수에 값을 저장하고, 기존 Optional 변수는 Optional type 을 유지한다. 값이 저장된 상수는 if 구문 안에서만 사용 가능하다. else 구문에서도 사용할 수 없고 else 는 불필요한 경우 없어도 된다.
상수 이름은 기존 Optional 변수와 같아도 무방하고 한 번에 여러 옵셔널 타입을 바인딩 할 수도 있다. 단, 모두 non nil 이어야 true 가 된다.
if let nonOptionalNum = optionalNum { print(nonOptionalNum) }
else { print(optionalNum) }
2. guard let
함수에서만 쓰이며 guard 구문 불만족 시 함수를 return 하는 방식으로 사용한다. else 에서 return 하므로 else 구문이 꼭 필요하다. guard 문 밖에서만 선언된 상수를 사용 가능하다. 즉, guard 문 이후에 함수 내부에서 자유롭게 상수를 사용한다.
선언할 상수는 매개변수로 넘어 온 값을 바인딩 할 때만 같은 이름으로 작성 가능하고, 함수 내에 선언된 Optional 지역 변수에 대해서는 같은 이름으로 바인딩 할 수 없다.
if let 과 마찬가지로 한 번에 여러 옵셔널 타입을 바인딩 할 수 있고 모두 non nil 이어야 true 가 된다.
guard let nonOptionalNum = optionalNum else { return }
'iOS 개발 > Swift 문법' 카테고리의 다른 글
[iOS/Swift] Initializer 정리 (Swift 공식 문서) (0) | 2021.10.21 |
---|---|
[iOS/Swift] KeyPath (0) | 2021.04.14 |