[cocoa-touch] 신속한 코드 실행의 진입 점은 무엇입니까?

main()신속한 방법 은 없습니다 . 프로그램은 어딘가에서 실행을 시작해야합니다. 그렇다면 신속한 코드 실행의 진입 점은 무엇이며 어떻게 결정됩니까?



답변

일반 Swift 모듈의 진입 점은 main.swift. main.swift최상위 수준에서 표현식과 명령문을 가질 수있는 유일한 파일입니다 (모듈의 다른 모든 Swift 파일은 선언 만 포함 할 수 있음).

Cocoa Touch는 진입 점을 표시하기 위해 파일 대신 구현에 @UIApplicationMain속성 을 사용합니다 . 코코아는 최소한 사용하는 데 사용 단순히라는 파일을 하지만, 엑스 코드 6.1로 용도 속성 의 구현에를 .UIApplicationDelegatemain.swiftmain.swiftNSApplicationMain@NSApplicationMainNSApplicationDelegate


답변

에서 AppDelegate.swift파일 당신이 볼 수 있습니다 @UIApplicationMain.

AppDelegate는 초기 항목 파일입니다.

기본적으로 : main.mAppDelegate.m좀에 병합 Swift단지에AppDelegate.swift


답변

파일 및 초기화 를 읽을 수 있습니다.

예외는 “main.swift”라는 이름의 특수 파일로, 플레이 그라운드 파일처럼 동작하지만 앱의 소스 코드로 빌드됩니다. “main.swift”파일은 최상위 코드를 포함 할 수 있으며 주문에 따른 규칙도 적용됩니다. 실제로 “main.swift”에서 실행되는 코드의 첫 번째 줄은 암시 적으로 프로그램의 기본 진입 점으로 정의됩니다. 이것은 최소한의 Swift 프로그램이 “main.swift”에있는 한 단일 라인이되도록합니다.

Xcode에서 Mac 템플릿은 기본적으로 “main.swift”파일을 포함하지만 iOS 앱의 경우 새 iOS 프로젝트 템플릿의 기본값은 일반 Swift 파일에 @UIApplicationMain을 추가하는 것입니다. 이렇게하면 컴파일러가 iOS 앱의 기본 진입 점을 합성하고 “main.swift”파일이 필요하지 않습니다.

또는 Objective-C에서 Swift로 프로젝트를 점진적으로 마이그레이션 할 때 일반적으로 Objective-C로 작성된 main 구현에서 링크 할 수 있습니다.


답변

Swift 앱에는 다음과 같은 속성이 있습니다.

  • @UIApplicationMain (코코아 터치)
  • @NSApplicationMain (코코아)

애플리케이션의 진입 점이 어디인지 신속한 컴파일러에 알려줍니다.

신속한 컴파일러가 내부적으로 수행하는 작업은 main기본적으로 Objective-C 앱에서와 동일하게 보이고이 메서드를 앱의 진입 점 (애플리케이션 프로세스가 시작될 때 호출되는 첫 번째 메서드)으로 취급 하는 함수를 생성한다는 것 입니다.

swift 컴파일러가 Main어트리뷰트로 무엇을 하는지, OS가 애플리케이션의 진입 점이 어디인지 아는 방법에 대해 더 알고 싶다면이 기사를 읽는 것이 좋습니다. iOS 앱 진입 점 이해


답변

Swift 5.3에는 @main프로젝트의 진입 점 위치를 제어 할 수 있는 새로운 속성이 있습니다 main.swift. 기본 항목은 하나만있을 수 있으며 main.swift파일과 속성을 가질 수 없습니다 @main. 자세한 내용은 https://github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.md 를 참조하십시오.

@main
struct App {
    static func main() {
        print("Starting.")
    }
}


답변