TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #138 973
🔢 @MainActor в Swift: как избежать багов с UI.

Сегодня разберём @MainActor — один из самых важных атрибутов для iOS-разработки, который спасает от случайных крашей при обновлении интерфейса.


⚠️ Что такое @MainActor?

🔸 Маркер, гарантирующий выполнение кода в главном потоке.
🔸 Обязательное требование для всех операций с UI в SwiftUI/UIKit.
🔸 Часть системы акторов (Swift Concurrency).


🤔 Как он работает?

Автоматическая диспетчеризация.
Помеченный код всегда выполняется на главном потоке:


@MainActor
func updateUI() {
label.text = "Обновлено!" // Безопасное обновление UI
}


Для классов.
Можно пометить весь класс, если он работает с интерфейсом:


@MainActor
class UserProfileViewModel: ObservableObject {
@Published var name: String = "" // Изменения в главном потоке
}



❌ Ошибки без @MainActor.


Task {
let data = await loadData() // Фоновое выполнение
titleLabel.text = data.title // Краш: попытка обновить UI не из главного потока
}



✅ Решение:


Task {
let data = await loadData()

await MainActor.run { // Переключение на главный поток
titleLabel.text = data.title
}
}



♣️ Особенности в SwiftUI.

body уже на главном потоке.
Нет нужды дополнительно маркировать:


struct ContentView: View {
var body: some View { // Автоматически @MainActor
...
}
}


MVVM и ObservableObject.
Лучше явно пометить ViewModel при помощи @MainActor:


@MainActor
class SettingsViewModel: ObservableObject {
@Published var theme: Theme = .light
}



💡 Вывод:

@MainActor — это важный инструмент для безопасной работы с UI, который автоматически гарантирует выполнение кода в главном потоке. Он особенно полезен в SwiftUI и UIKit, предотвращая случайные краши при обновлении интерфейса из фоновых задач.


➡️ Подписаться на канал
Мобильный трудоголик
  • ❤ 25
  • 👍 14
  • 🔥 1
More from @hardworkerit
  1. Oct 9, 2026👨‍💻 Умение адаптироваться - важный навык айтишника, который часто недооценивают. В ИТ не…
  2. Oct 8, 2026🈸 Apple обяжет разработчиков поддерживать iPhone Duo. Apple опубликовала требования к при…
  3. Oct 6, 2026🔢 Swift 6.4: новая диагностика ретейн циклов. В Swift 6.4 появилась новая диагностика, ко…
  4. Oct 4, 2026🔢 SwiftUI: определение угла раскрытия iPhone Duo. В iOS 27.1 появился модификатор .onHing…
  5. Oct 2, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
  6. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →