SwiftUI 오류 유형

2021년 4월 27일 수정

≡ 목차 (Table of Contents)

이 글은 개인적으로 SwiftUI 코드를 사용하다 종종 겪은 오류 유형과 해결법을 정리한다.

self is immutable

여러가지 원인이 있을 수 있겠지만 여기서는 예를 들어 아래와 코드가 있다고 치자.

struct SomeView: View {
    var timer: Timer? = nil
    ...
    var body: some View {
        VStack {
            ...
        }
        .onAppear {
            timer = Timer(...) /* ! */
        }
    }
}

여기서 느낌표를 표기해 둔 코드 부분이 문제가 될 수 있다. 아래와 같은 오류가 발생한다.

Cannot assign to property: 'self' is immutable

오류로 파악해 보자면 View 자체는 immutable이라고 이해가 가능하다. 그래서 프로퍼티에 어사인하는 행위가 오류로 간주되나보다.

따라서 이 빌드 오류는 단순히 해당 프로퍼티를 State 처럼 변할 수 있는 상태로 만들어 주면 해결된다. 즉 위의 코드에서 timer 프로퍼티를 선언하는 부분을 아래처럼 바꿀 수 있다.

@State var timer: Timer? = nil

물론 프로퍼티로 쓰는 타입이 뭔지에 따라 ObservedObject 등 적절한 SwiftUI Property Wrappers를 사용해야 한다.