전역 변수를 옵셔널 ! 로 하는 이유?

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • Ky J
      참가자
      • 글작성 : 5
      • 답글작성 : 0
      1,350 포인트

      제가 궁금해 하는 부분에 대해 검색을 해봐도 속 시원하지가 않아서 질문 올립니다 !

       

      예를 들어

      class NobodyViewController: UIViewController {

      var someController: SomeController! = nil

      }

      이런 클래스를 생성 하는데 안에 전역변수가 옵셔널로 하는 이유가 초기화시 값을 나중에 초기화 할려고 하는걸로 알고 있는데요.

      단순 Int,String 을 옵셔널로 하는 의도는 알겠는데 class를 왜 옵셔널로 설정 하는 이유가 궁금합니다. 처음부터 초기화 시켜놓고 사용하면 안되는건가요?

      ?로 안하고 !로 하는 이유는 무조껀 필요하다는 의미로 알고 있는데 맞는건지.. 필요한데 왜 옵셔널인건지 의도와 이유가 궁금합니다. 

      그리고 ! = nil 로 되어있는 부분도 궁금합니다. 단지 !가 아니라 ! = nil 인건 처음 초기화시 nil이라는걸 명확히 하기 위해서인가요? 딱히  =nil을 안써도 되는건가요?

    • 오동나무
      참가자
      • 글작성 : 0
      • 답글작성 : 10
      1,800 포인트

       

      ViewController가 언제 어떻게 View를 그리고 있는지 ViewController의 Life Cycle에 대해서 알아보시면 좋을 것 같습니다!

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 539
      18,860 포인트

      스위프트에서 프로퍼티는 이니셜라이즈 과정에서 값이 꼭 존재해야 한다는 규칙이 있습니다.
      https://docs.swift.org/swift-book/LanguageGuide/Initialization.html

      그런데 인스턴스를 생성하는 과정에서 값을 초기화해주지 못하는 프로퍼티가 있다면 옵셔널을 활용해서 프로퍼티를 선언해줍니다. 그러면 이니셜라이즈 과정에서 초기화하지 않아도 nil 이 자동으로 할당되거든요.
      그렇지만 이 인스턴스가 제대로 동작하기 위해서 꼭 필요한 값이라면 사용 전에 이 값을 꼭 할당해달라는 의미로 암시적 추출 옵셔널(!)로 선언할 수 있습니다.

      말씀하신대로 처음부터 초기화하고 사용할 수 있다면 옵셔널을 사용하지 않아도 됩니다.
      또, = nil 을 하지 않아도 자동으로 nil이 할당되어 초기화됩니다.

2 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 260-27-00477
통신판매업 신고번호 : 제 2020-충북청주-0663 호
고객센터 : 카카오톡채널 @yagom