IBOutlet
. 특히, 왜 강제 옵셔널 언래핑이어야만 하는가에 대해서.IBOutlet
은 강제 옵셔널 언래핑이 붙어서 생성이 된다. 하지만 왜 그럴까?IBOutlet
만??viewDidLoad()
가 아직 되지 않은 상태라면, 각종 레이블이나 서브뷰 처럼 뷰컨트롤러가 들고 있는 프로퍼티들은 아직 로드되지 않은 상태인 것이 맞는다. viewDidLoad()
호출 이후에는 해당 값들이 존재함이 보장되므로, 강제 언래핑이어도 일단은 괜찮다는 것이다. (두 번째 착지점)IBOutlet
이 기본적으로 변수로 지정되는 이유도 여기에 있다. viewDidLoad()
이전에는 값이 없는 상태이지만, viewDidLoad()
이후에는 새로운 값을 '새로 할당' 해줘야 하기 때문. 마치 테스트 코드를 짤 때, sut
을 강제 옵셔널 해제 변수로 만들어 놓고 setUpWithError()
에서 테스트하고자 하는 인스턴스를 넣어주는 과정과 비슷하달까..nil
일 때 불러와야 할 일이 있다면, 이것은 강제 옵셔널로 지정되어서는 안 되겠다.https://blog.curtisherbert.com/to-optional-or-not-to-optional-iboutlet/
https://cocoacasts.com/should-outlets-be-optionals-or-implicitly-unwrapped-optionals