본문 바로가기

프로그래밍/SWIFT

[Swift] publishing changes from background threads is not allowed; make sure to publish values from the main thread

반응형

swiftui 에서 async 콘텍스트에서 UI 와 관련된 변수를 업데이트할 때 발생한다. xcode에서 보라색으로 나타나는 워닝이다.

UI 관련 변수를 업데이트할 때에는 main 쓰레드에서 업데이트 될 수 있도록, await MainActor.run { } 블록으로 감싸주어야 한다. 이 방법은 이전에 사용하던 DispatchQueue.main 을 대체하는 방식이다.

이 방법도 가능하지만, 더 아름다운 방식은, @MainActor 어노테이션을 사용하는 것. 해당 변수를 업데이트하는 코드가 들어있는 함수 선언에 어노테이션을 더해준다. @MainActor func uiUpdateFunc()

 

 

 - ref : Modern Concurrency in Swift Chapter 1, 2

728x90