KoreaMango 나무

[iOS App Dev Tutorials] SwiftUI - State Management (2) 본문

iOS/iOS App Dev Tutorials

[iOS App Dev Tutorials] SwiftUI - State Management (2)

KoreaMango 2022. 5. 18. 21:18
 

Apple Developer Documentation

 

developer.apple.com

2. Responding to Events

Scene Architecture

Scene은 시스템이 관리하는 수명주기가 있는 앱의 UI의 일부이다.

앱을 만들기 위해서는 앱 프로토콜을 준수하는 구조를 정의해야한다.

@main 속성을 앞에 둠으로써 시작점이 이곳이라는 것을 시스템에게 알릴 수 잇다.

앱 구조 내에 Scene 프토토콜을 준수하는 장면을 하나 이상 추가한다. Scene은 앱이 보여지는 View 계층의 컨테이너이다. 예를 들어 iOS와 watchOS는 하나의 Scene을 보여줄 수 있지만, macOS와 iPadOS는 여러 Scene을 보여줄 수 있다.

SwiftUI는 WindowGrouop 같은 원시적인 Scene을 제공한다. 시스템은 Scene의 수명주기를 관리하고, 플랫폼 및 문맥에 맞는 view 계층 보여준다. 예를 들어 iPad의 멀티 태스킹 OS는 동시에 동일한 앱의 여러 작은 인스턴스를 표시할 수 있다.

Scene Phases and Transitions

앱 실행 중에 Scene은 3단계로 전환할 수 있다.

  • active - Scene이 foreground에 있으며, 유저와 상호작용이 가능하다.
  • inactive - Scene이 보이긴하나, 시스템과 유저의 상호작용이 불가능하다. 예를 들어 멀티태스킹 모드에서 앱의 패널을 다른 패널과 볼 수 있지만 활성 패널은 아니다.
  • background - 앱이 실행중이지만 UI속 scene이 보이지 않는다. 앱 종료 전에 Scene이 이 단계로 들어간다.

ScenePhase 환경 값을 사용해서 Scene의 현재 상태를 읽을 수 있다. 가끔 Scene이 다른 단계로 전환할 때 프로그램에서 일련의 작업을 수행할 수 있다.

 

이번 장에서 onChange(of: perform:) 수정자를 사용해서 여러 실행에서 앱 상태를 저장한다. 이 수정자를 통해 Scene 단계가 비활성화 될 때 앱 데이터를 저장하는 작업을 트리거할 수 있다.

Scene과 Scene 단계에 더 배우고 싶다면 https://developer.apple.com/videos/play/wwdc2020/10037/

Events and State

보통 프로그램 상태의 변화에 따라 반응하는 view를 변형하는 명령형 패턴에 친숙할지도 모르지만,

SwiftUI에서는 선언적 언어 패턴을 따른다.

SwiftUI의 view body에서는 UI가 모든 상태를 어떻게 나타내는지 설명한다. 실행 중에 시스템은 상태가 변할 때 마다 앱의 상태를 저장하고 UI 관련된 부분을 업데이트해서 UI를 동기화한다.

다음 그림은 SwiftUI가 사용자 초기 이벤트나 앱 상태 변화에 어떻게 반응하는지 보여준다.

사용자 상호 작용 또는 알림 같은 이벤트는 앱이 응답한다. 사건에 대한 응답으로 closure가 실행된다. 이것은 진실 소스의 변화의 결과를 초래할 수 있다. 변화를 관찰한 후에 SwiftUI는 view를 업데이트하고 UI를 렌더링한다.

View Life Cycle Events

사용자 상호작용 방법 말고, view가 화면에 보일 때랑 보이지 않을 때 원한다면 변화시킬 수 있다.

예를 들면 view가 나타날 때마다 view의 컨트롤을 재설정하거나 네트워크 서버에서 업데이트된 정보를 가져올 수 있다.

SwiftUI에는 view life cycle events가 3개가 있다.

  • onAppear(perform:) - 처음은 아니지만, 화면에 view가 나타날 때 작업을 트리거한다.
  • onDisappear(perform:) - view가 화면에서 사라질 때 작업을 트리거한다.
  • task(priority:_:) - view가 화면에 나타날 때 비동기적으로 실행되는 작업을 트리거한다.

이러한 수정자를 사용해서, view가 나타날 때나 사라질 때 앱의 상태를 변화를 줄 수 있다.

SwiftUI view의 life cycle을 더 공부하고 싶다면 https://developer.apple.com/videos/play/wwdc2021/10022/

을 보면 된다.

UIKit을 생각하면 viewDidLoad, viewWillAppear 과 비슷한 파트로 볼 수 있을 것 같다.