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

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

51840 次浏览

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

Cocoa Touch 在 UIApplicationDelegate的实现中使用 @UIApplicationMain属性而不是 main.swift文件来标记入口点。Cocoa 过去使用一个最小的 main.swift文件,它只调用 NSApplicationMain,但是 从 Xcode 6.1开始UIApplicationDelegate1的一个实现上使用 UIApplicationDelegate0。

AppDelegate.swift文件中可以看到 @UIApplicationMain
应用委托是初始条目文件。

Basically: main.m and AppDelegate.m are kinda merged in Swift to just AppDelegate.swift

你可能需要阅读 文件和初始化

例外是一个名为“ main.swift”的特殊文件,它的行为很多 like a playground file, but is built with your app’s source code. The “ main.swift”文件可以包含顶级代码,并且依赖于顺序 实际上,要运行的第一行代码 “ main.swift”被隐式定义为 program. This allows the minimal Swift program to be a single line — 只要那句台词是“ main.swift”就行。

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

或者,您也可以链接在 Objective-C,在从 目标 C 呼叫斯威夫特。

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

  • @UIApplicationMain (Cocoa Touch)
  • @NSApplicationMain(可可)

that tell the swift compiler where is the entry point of the application.

快速编译器在底层所做的就是创建一个 main函数,它看起来基本上和 Objective-C 应用程序一样,并且把这个方法当作应用程序的入口点(在应用程序进程启动时调用的第一个方法)。

如果您想了解更多关于快速编译器如何处理 Main属性的信息,以及操作系统如何知道应用程序的入口点在哪里,我建议您阅读这篇文章: 了解 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.")
}
}

enter image description here

普通 Swift 模块中的入口点是名为。