개발/Swift

[Swift] ViewController Custom Init (parameter 전달)

덤벨로퍼 2022. 8. 29. 16:35

Modern Collection View 와 MVVM 패턴 가이드

 

[iOS] Modern Collection View & MVVM 패턴 가이드 - 인프런 | 강의

MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자재로 다룰 수 있게 됩니다., - 강의 소개 | 인프런

www.inflearn.com

ViewController Custom Init (parameter)

코드로 UI 를 짜는경우는 이렇게 사용할수있다.

init(viewModel: MonitoringViewModel) {
        self.monitoringViewModel = viewModel
				super.init(nibName: nil, bundle: nil)
    }
    
required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

스토리 보드를 쓰지 않기떄문에 required init?(coder: NSCoder)

이부분이 불리지 않을것이다.

 

하지만 스토리보드로 UI를 사용했다면

storyboard.instantiateViewController(withIdentifier: "viewController")

이렇게 스토리보드 에서 뷰컨트롤러를 init 하게되고

required init?(coder: NSCoder) 이 실행된다.

이 부분은 거스를수가 없어 결국 init을 커스텀하는것이 불가능하다.

 

init 이후에 viewDidload()가 불리게 될텐데

따라서 뷰컨에 파라미터를 지정해주기 위해서는 init -> viewdidLoad() 이후

 파라미터를 세팅해주는것 말고는 답이없다.

let viewController = storyboard.instantiateViewController(withIdentifier: "viewController")
viewController.viewModel = ViewModel()