Swift에서는 비동기 코드를 실행할 때 Task
를 사용하며, UI 업데이트가 필요한 경우 @MainActor
를 함께 사용합니다.
Task를 사용한 비동기 실행
Task {
let data = try await fetchData()
print("데이터: \(data)")
}
Task
는 새로운 비동기 컨텍스트를 생성하는 역할을 합니다.
@MainActor: UI 업데이트 시 사용
Task { @MainActor in
imageData = try JSONDecoder().decode(PandaCollection.self, from: data)
}
SwiftUI에서는 UI 업데이트를 메인 스레드에서 실행해야 하기 때문에 @MainActor
가 필요합니다.
Kotlin의 유사한 코드
lifecycleScope.launch {
withContext(Dispatchers.Main) {
imageData = json.decodeFromString<PandaCollection>(data)
}
}
Swift의 @MainActor
는 Kotlin의 Dispatchers.Main
과 유사한 역할을 합니다.
Task와 @MainActor 함께 사용하기
Task { @MainActor in
let data = try await fetchData()
updateUI(with: data)
}
이렇게 하면 비동기 작업을 실행하면서도 UI 업데이트를 안전하게 수행할 수 있습니다.