사실 처음 IOS개발을 하면서 대부분 !을 썻던것 같은데..!
사실 Optional forcely Unwrapping은 매우매우 위험하다고 한다!!
그래서 존재하는 것이 옵셔널 바인딩과, 옵셔널 체이닝, nil coalescing이다.
오늘은 옵셔널 체이닝과 nil coalescing에 대해 공부할 것이다.
class나 struct를 사용하면서 class나 struct안에 저장 프로퍼티를 선언하면서 저장프로퍼티의 자료형을 class나 struct로 하는 경우가 엄청 많다!! 예를 들면
여기를 보면 Person 클래스 안에 home이라는 Apartment 클래스를 자료형으로 갖는 프로퍼티가 있다!! 사람이 집이 있을 수도 있고 없을 수도 있으니 옵셔널로 처리한다. 또한 Apartment 클래스를 보면 guard 와 owner 모두 옵셔널 Person 클래스를 자료형으로 갖는 저장 프로퍼티가 있다.
그렇다면 우리가 옵셔널을 벗겨내기 위해 방법은 4가지가 있다.
1 . !를 쓰는 강제 언랩핑
2. 옵셔널 바인딩이 있다. guard let문 혹은 if let문이 존재한다.
3. 옵셔널 체이닝
4. nil coalescing
위의 구문에서 어떤 사람이 사는 아파트의 경비원의 직업을 알고 싶다면?? 어떻게 해야할 까
이렇게 먼저 선언이 되어있다면
도현이 살고 있는 아파트에 경비원의 직업이 궁금하다면?
이때 옵셔널 체이닝이 없고, if let을 쓰는 옵셔널 바인딩을 쓴다면?
이런식으로 하나씩 다 옵셔널 바인딩을 해주면서 들어가야한다. 왜냐면 ,owner, home, guard, job 모두 옵셔널이기 때문이다!
또한 위의 선언에서 도현의 home은 어디인지 선언을 안해줬기때문에 nil 값으로
결과값은 이렇게 뜬다!
그렇지만 옵셔널 체이닝을 쓴다면
너무나도 짧은 것~~~
약간 해석하면 이런식이다.
owner? 가 있어 없어? 있으면 home? 이 있어 없어 있으면 guard에 값이 있어 없어? 있으면 job이 있어? 없어? 있으면 그 값을 guardJob을 넣어 !!!
이런 느낌이다. 여기서 없으면 nil 로 되면서 else 문으로 들어간다!!
nil coalescing은 ?? 이라는 연산자를 사용하면서 optional을 벗겨내는 방법이다.
??을 기준으로 ?? 앞쪽에 있는 변수에 값이 있다면 그 값을 배출하고, 아니라면 ?? 뒤의 값을 배출하는 방식이다. 약간 ?? 뒤는 default 값이라고 보면 되려나 싶다!!
[swift] Guard let (0) | 2021.03.29 |
---|---|
[iOS] 세그웨이 사용법 (0) | 2021.03.22 |
[Swift] 프로퍼티 - 연산프로퍼티(Computed property) (0) | 2021.03.13 |
[swift] 프로퍼티 - stored property (0) | 2021.03.12 |
[iOS] CGRect, CGSize, CGPoint (0) | 2021.03.12 |
댓글 영역