SwiftUI 뷰 라이프사이클 관련 속성

2022년 9월 23일 수정

≡ 목차 (Table of Contents)

onAppear

이름처럼 뷰가 처음 등장했을 때 실행될 루틴을 구현할 수 있다.

struct SomeView: View {
    var body: some View {
        VStack {
            ...
        }
        .onAppear {
            someProperty = anotherProperty ?? "Default Value"
        }
    }
}

여러 곳에서 사용할 수 있긴 하지만 제약이 있는 편이다. 앱 컨트롤러 컴포넌트 혹은 레이아웃 컴포넌트 정도에서만 쓸 수 있는 것 같다.

SwiftUI에는 viewDidLoad 같은 것을 사용할 수 없으므로 onAppear 와 함께 최초 여부를 파악하기 위한 특정 스테이트를 추가하는 방법을 이용해 비슷한 용도로 사용할 수 있다. 즉 onAppear 는 일단 뷰가 로드된 다음에 호출된다고 생각하면 된다.

task

위의 onAppear 의 경우는 동기 코드만 사용이 가능하다는 단점이 있다. 이 경우 Task 등을 이용해 비동기로 구동시키는 방법(Swift async/await 참고)이 없는 것은 아니지만, onAppear 대신 이 항목의 주제인 task 를 이용하는 방법이 더 간단하다.

struct SomeView: View {
    var body: some View {
        VStack {
            ...
        }
        .task {
            await someAsyncFuncs()
        }
    }
}

당연하게도 비동기 코드들이 들어가게 되므로 뷰가 이 함수가 실행되기 전에 먼저 렌더링 될 수 있음을 기억하자.