k-coding
Swift Optional ( 2 ) 본문
Swift Optional ( 2 )
Optional된 상수, 변수를 unwrapping하는 과정으로는 강제 추출과 optional binding을 포스팅한적이 있는데,
이 두개를 제외하고 다른 optional을 다루는 명령어를 익혀보고자 한다.
첫번째는 ?? 연산자이다.
?? ( Nil-Coalescing Operator )
다음과 같이 ??를 사용하면 값을 굳이 꺼내지 않아도 된다.
Optional 표현식 ?? nonOptional 표현식
예제를 보자면
let name: String? = "choiki"
print("name is" + (choiki ?? " not collected "))
위에 코드는 첫번째 줄에 선언된 number가 nil값이 아니라면 ?? 기준으로 앞에있는
name is choiki가 출력될 것이다.
반대로 값이 nil이라면 ?? 기준으로 뒤에있는
name is not collected가 출력될 것이다.
다만 nil-coalescing operator를 사용할때에는 ?? 를 기준으로 앞,뒤에
Optional type과 non-optional type의 type이 동일해야만 한다.
Implicitly Unwrapped Optional ( IUO )
IUO는 해석하면 묵시적 옵셔널 추출이라는 뜻이다.
속성은 강제 추출과 비슷하게 강제로 옵셔널값을 추출해주는것인데,
추출과정을 걸치지않고 옵셔널이 자동적으로 해제가 된다.
이와같은 묵시적 옵셔널 추출은 사용하려면 ! 연산자를 붙여주면된다.
let number: Int!
위와같이 한줄만 쓴다고 number의 값이 옵셔널 언래핑된 상태가 아니다.
let number: Int!
print(type(of:number)) //Optional<Int>
물론 값도 옵셔널에 래핑되서 나온다.
위 변수, 상수를 언래핑을 해주는 과정은 다른 변수에 넣어주면 된다.
let number: Int! = 3
var number2: Int = number
다음과 같은 과정을 걸치면 number의 값은 Optional(3) 이지만, number2의 값은 Int형인 3이 나온다.
물론 IUO방법이 아닌 일반 옵셔널로 선언했다면 다음과 같이된다.
let number: Int? = 3
var number2: Int = number // compile error
number의 타입은 Optional<Int>타입인데, Int형인 number2가 받으려고 해서 타입 미스매치가 발생한것이다.
하지만 이 방식은 아이러니하게도 nil값을 담을수가 없다
optional을 사용하는 이유가 nil값을 담기 위해서인데 nil값을 담을수가 없다...
따라서 자주 사용되지않는 연산자 ! 이다.
'iOS > Swift 정리' 카테고리의 다른 글
Swift 열거형 ( enum ) (0) | 2021.10.11 |
---|---|
Swift Optional ( 3 ) (0) | 2021.10.10 |
Swift 함수 사용 (0) | 2021.10.07 |
Swift 제네릭 ( 미 완 ) (0) | 2021.10.07 |
Swift 상속 (0) | 2021.10.07 |