iOS에서 @main
은 Swift 프로그램의 진입점을 표시하는 데 사용되는 attribute입니다. Swift 5.3 이후 @UIApplicationMain
을 대체하기 위해 도입되었습니다.
import UIKit
@main
struct MyMain {
static func main() -> Void {
UIApplicationMain(
CommandLine.argc,
CommandLine.unsafeArgv,
nil,
NSStringFromClass(AppDelegate.self)
)
}
}
// look, ma, no @UIApplicationMain!
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool {
...
}
}
@main
은 Swift 5.3에서 도입된 새로운 기능입니다. 앱의 진입점을 지정하고 UIApplicationMain
함수를 자동으로 호출한다는 면에서는 두 attribute가 동일합니다. 즉 main.swift
파일을 직접 생성하는 대신 Swift가 생성하도록 할 수 있습니다.@main
을 사용하면 커스텀 타입 중 하나를 @main
으로 지정한 후 static
main
함수를 선언하여 main.swift
파일에서 수행했던 모든 작업을 수행할 수 있습니다. 이를 type-based program entry point라고 하며 @UIApplicationMain
이 할 수 없는 작업입니다.@main
은 struct
에도 선언 가능하다는 차이가 있습니다. 이는 진입점이 주로 struct
로 선언되는 SwiftUI
의 새로운 라이프사이클에 대응하기 위함입니다.UIApplicationMain
함수를 자동으로 호출한다는 면에서 동일합니다.struct
에도 선언 가능하며 따라서 SwiftUI
에서도 사용이 가능합니다.