Ответ
@main — это атрибут, который помечает структуру или класс как точку входа (entry point) для исполняемой программы на Swift. Компилятор автоматически генерирует код, который вызывает статический метод main() аннотированного типа.
Использование в SwiftUI приложении:
import SwiftUI
@main // Объявляет MyApp точкой входа
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
// Компилятор сгенерирует основной код, который запускает это приложение.
Использование для UIKit / AppDelegate:
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
// ... методы делегата
}
Почему это важно:
- Упрощает код: Заменяет необходимость вручную создавать файл
main.swiftс вызовомUIApplicationMain. - Стандартизация: Обеспечивает единый способ объявления точки входа для SwiftUI, UIKit и даже консольных утилит.
- Требует Swift 5.3 или новее. Ранее для UIKit использовался атрибут
@UIApplicationMain.
Тип, помеченный @main, должен либо соответствовать протоколу App (SwiftUI), либо быть подклассом UIApplicationDelegate (UIKit), либо реализовывать статический метод main().