Вступить в клуб →
лёгкаявопросSwift Concurrency: Task, акторы и MainActor

Фиолетовое предупреждение Publishing changes from background threads is not allowed

final class OrdersViewModel: ObservableObject {
    @Published var orders: [Order] = []

    func load() async throws {
        orders = try await api.orders()
    }
}

Экран вызывает load() из .task { }. В Xcode появляется фиолетовое предупреждение о публикации изменений из фонового потока, иногда список обновляется с задержкой. Как исправить системно?

  • Пометить класс ViewModel атрибутом @MainActor
  • Сделать orders обычным свойством без @Published
  • Вызывать load() через Task.detached
  • Объявить orders как nonisolated

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела