swift中没有main()
方法。程序必须从某个地方开始执行。那么快速代码执行的切入点是什么?它是如何决定的?
答案 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.m
和AppDelegate.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 >