https://velog.io/@jwl-98/Swift-break-사용-상황에-관하여부제-nil이라는건-무엇인가-Optional-Unwrapping-의-종류는
이전에는 옵셔널의 의미와 언래핑종류에 대해서 공부했습니다.
이번엔 옵셔널 문법이 어떤경우에 사용되는지에 대해서 공부해보려고 합니다.
옵셔널 타입으로 선언된 값에 접근할때 사용합니다.
옵셔널 값이 아닐때
옵셔널 값일때
앞의값이 옶셔널의 가능성을 내포한다는 의미입니다.
결과는 항상 옵셔널로 리턴합니다.
옵셔널 체이닝 과정에서 하나라도 nil을 리턴 한다면,다음 표현식을 평가하지 않고 nil을 리턴합니다.
이경우 아주 간단하게 이해하면 됩니다.
우리는 항상 접근 연산자 .을 사용하여 클래스의 속성에 접근하게 되는데
클래스의 인스턴스가 실제로 nil이라면 당연하게도 접근이 불가능합니다.
결국 이러나저러나 옵셔널 값으로 출력되기 때문에 벗겨서🥵 사용해야 합니다.
Implicitly Unwapped Optional
타입에 !가 있는 문법입니다.
표현식은 이렇습니다.
값을 대입하지 않으면 nil로 초기화 됩니다.
값을 넣고 출력해보면 Optinal(값)으로 출력됩니다.
Int?
와 뭐가 다른가 생각이 듭니다.
여기에 관한 힌트는 강제 언래핑 ! 에 있습니다.
타입이 명시적으로 선언된 변수에 담게 되면 강제 언래핑되어 저장됩니다.
근데 사실 뭔가 와닿지 않습니다.
공식문서를 확인해보겠습니다.
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/automaticreferencecounting/#Unowned-References-and-Implicitly-Unwrapped-Optional-Properties
예제 내용은 이렇습니다.
모든 Contry는 capital city를 가지고 있어야 합니다.
그리고 City는 Contry에 속해있어야 합니다.
그리고 이걸 표현하기위해서
표현한 코드는 아래와 같습니다!
요약 하자면
Contry클래스가 생성되려면 반드시 capitalCity라는 프로퍼티가 반드시 초기화 되야합니다.
이를 해결해줄수있는게 Implicitly Unwapped Optional 입니다.
기본값이 nil로 설정되어 있으니 City인스턴스에 접근할수 있습니다.
City 인스턴스에 접근해서 초기화가 완료되면 capitalCity는 City 인스턴스를 가르키게 됩니다.
이제 왜 암시적 언래핑 옵셔널인지 약간은 감이 오기 시작했습니다.
이렇게 로직상 값이 무조건 존재하니 옵셔널 바인딩이 필요없다고 판단되는경우 사용합니다.
실제로 앱만들기를 시작할때
IBOutelt weak var ImageView: ImageView!
라는 코드를 볼수 있습니다.
(스토리보드와 코드를 연결할떄 생기는 변수입니다.)
위 코드를 생성했다는건 분명히 속성을 변경할것이고, 값을 할당할테니
접근을 허락해주겠다! 라는 소리 같습니다.
만약 이런 문법이 없고 옵셔널 형태만 존재한다면
IBOutelt weak var ImageView: ImageView?
속성에 접근할때 ImageView?.image ... 이런식으로 작성하게 됩니다.