App Delegate 대신 가능하지만 권장x -> multi-window 지원을 위해 도입된 Scene Delegate를 사용하는 것이 더 권장 됨
만약 appDelegate가 scene들의 초기화를 맡게 된다면 모든 scene들이 동일한 초기화를 갖게 됨
반면 sceneDelegate가 맡으면 각 scene마다 초기화를 갖고 더욱 조직화, 모듈화 된 코드가 되고 가독성이 높아짐
상기 했듯 ios13 이후 지원 시작하며 유연성을 위해 optional로 정의되어있지만 직접 초기화 하기 위해서는 필수적인 메서드.
scene: UIScene
: 현재 연결된 또는 생성된 scene
session: UISceneSession
: 세션 정보, 설정, 상태 등(multi scene은 scene마다 고유한 session이 존재함)
connectionOptions: UIScene.ConnectionOptions
: scene이 연결될 때의 추가 정보를 담음(푸시 알림이나 url 등으로 열렸다는 정보 등)
guard let windowScene = (scene as? UIWindowScene) else { return }
scene이 UIWindowScene인지 체크 하여 다운캐스팅하게 됨.
>> ios에서 앱의 window를 관리하는 객체로 만들기 위함.
UIWindow는 UIWindowScene과 연결되어야 작동가능하기 때문
이후 window를 설정한 후 sceneDelegate의 window를 원하는 scene으로 설정하게 됨