Что делает атрибут @main в Swift?

«Что делает атрибут @main в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

@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().