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

В Swift 6 передача класса корзины в Task.detached перестала компилироваться

final class Cart {
    var items: [CartItem] = []
}

@MainActor
func checkout(cart: Cart) {
    Task.detached {
        let total = PriceCalculator.total(cart.items)
        await showTotal(total)   // @MainActor-функция
    }
}

После перевода модуля на Swift 6 компилятор выдаёт ошибку о передаче значения не-Sendable типа Cart в другой контекст изоляции. Какое исправление устраняет саму гонку?

  • Передать в задачу копию данных — массив структур
  • Пометить Cart как @unchecked Sendable
  • Вернуть режим Swift 5, где ошибки нет
  • Сделать свойство items через lazy var

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

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

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

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