@MainActor — это глобальный actor, введённый в модель структурированной параллельности Swift. Он гарантирует, что аннотированный код всегда выполняется на главном потоке, проверяя это на этапе компиляции, а не полагаясь на ручное управление потоками.
Когда ты помечаешь класс, функцию или свойство с @MainActor, компилятор Swift гарантирует, что весь доступ к этому коду автоматически диспетчеризируется на главный поток. Это исключает необходимость в шаблонном коде вроде:
DispatchQueue.main.async { ... }
@MainActor, то есть весь рендеринг и обновление состояния уже работают на главном потоке@Observable или ObservableObject view model, которая управляет UI, тоже должна быть помечена @MainActor@MainActor
class ProfileViewModel: ObservableObject {
@Published var username: String = ""
func loadUser() async {
let data = await fetchFromNetwork()
username = data.name // safely runs on main thread
}
}
Помечать свои view models и код, связанный с UI, с помощью @MainActor считается хорошей практикой в современной разработке на SwiftUI. Это делает обновления UI безопасными, код чистым и избавляет от необходимости в ручной диспетчеризации потоков.
Представления SwiftUI неявно помечены как @MainActor, что означает, что весь рендеринг представлений и обновление состояния автоматически выполняются в главном потоке без явной аннотации.
Новый — ещё не проверен сообществом
Вы