Как использовать @MainActor для интерфейса в Swift
@MainActor привязывает класс, метод, свойство или замыкание к глобальному актору, задачи которого идут в главном потоке. В конкурентном коде так компилятор проверяет контекст обновлений UI вместо ручных вызовов DispatchQueue.main.async.
В Swift 6.2 новые проекты Xcode 26 по умолчанию изолируют код приложения главным актором. Тяжёлые вычисления можно вынести из главного актора через nonisolated или @concurrent, чтобы не задерживать интерфейс.
В режиме Swift 5 остаётся ловушка: синхронный @MainActor-метод из неизолированного контекста может выполниться в потоке вызывающего кода. Swift 6 ловит большинство таких случаев при компиляции. Разбор SwiftLee сравнивает MainActor.run с Task { @MainActor in } и объясняет ограничения assumeIsolated.
Post #4741
1.03K

- 👍 1