快速代码执行的切入点是什么?

时间:2014-06-08 11:30:02

标签: cocoa-touch swift ios8

swift中没有main()方法。程序必须从某个地方开始执行。那么快速代码执行的切入点是什么?它是如何决定的?

5 个答案:

答案 0 :(得分:81)

普通Swift模块中的入口点是名为main.swift的模块中的文件。 main.swift是唯一允许在顶层具有表达式和语句的文件(模块中的所有其他Swift文件只能包含声明)。

Cocoa Touch在@UIApplicationMain attribute的实现上使用UIApplicationDelegate而不是main.swift文件来标记入口点。 Cocoa曾经使用简称为main.swift的最小NSApplicationMain文件,但as of Xcode 6.1@NSApplicationMain attribute的实现上使用了NSApplicationDelegate

答案 1 :(得分:35)

AppDelegate.swift文件中,您可以看到@UIApplicationMain
AppDelegate是初始条目文件。

基本上:main.mAppDelegate.m有点合并到Swift只有AppDelegate.swift

答案 2 :(得分:25)

您可能需要阅读Files and Initialization

  

异常是一个名为“main.swift”的特殊文件,其行为很多   像一个游乐场文件,但是使用你的应用程序的源代码构建。该   “main.swift”文件可以包含顶级代码,并且依赖于顺序   规则也适用。实际上,要运行的第一行代码   “main.swift”被隐式定义为的主要入口点   程序。这允许最小的Swift程序成为单行 -   只要该行在“main.swift”中。

     

在Xcode中,Mac模板默认包含“main.swift”文件,但是   对于iOS应用程序,新的iOS项目模板的默认设置是添加   @UIApplicationMain到常规的Swift文件。这导致编译器   合成iOS应用程序的主要入口点,并消除   需要一个“main.swift”文件。

     

或者,您可以在主要编写的实现中链接   Objective-C,从增量迁移项目时很常见   Objective-C to Swift。

答案 3 :(得分:2)

在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.")
    }
}

答案 4 :(得分:1)

在Swift应用程序中,有以下属性:

  • @UIApplicationMain(可可粉)
  • @NSApplicationMain(可可)

告诉swift编译器应用程序的入口在哪里。

swift编译器在后台执行的操作是创建一个main函数,该函数基本上与Objective-C应用程序中的外观相同,并将此方法视为应用程序的入口点(第一种方法称为申请程序已启动)。

如果您想了解更多有关swift编译器如何使用Main属性的信息,以及操作系统如何知道应用程序的入口点,我建议您阅读本文:Understanding iOS app entry point