【发布时间】:2016-12-21 16:19:32
【问题描述】:
swift 中没有main() 方法。程序必须从某个地方开始执行。那么swift代码执行的切入点是什么,又是如何决定的呢?
【问题讨论】:
标签: cocoa-touch swift ios8
swift 中没有main() 方法。程序必须从某个地方开始执行。那么swift代码执行的切入点是什么,又是如何决定的呢?
【问题讨论】:
标签: cocoa-touch swift ios8
在 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.")
}
}
【讨论】:
在 Swift 应用中有属性:
@UIApplicationMain(可可触摸)@NSApplicationMain(可可)告诉 swift 编译器应用程序的入口点在哪里。
swift 编译器在后台所做的是它创建了一个main 函数,该函数看起来与 Objective-C 应用程序中的基本相同,并将此方法视为应用程序的入口点(应用程序调用的第一个方法)进程开始)。
如果您想了解更多关于 swift 编译器对Main 属性的作用,操作系统如何知道应用程序的入口点在哪里,我鼓励您阅读这篇文章:Understanding iOS app entry point
【讨论】:
在AppDelegate.swift 文件中,您可以看到@UIApplicationMain。
AppDelegate 是初始入口文件。
基本上:main.m 和 AppDelegate.m 有点合并到 Swift 到 AppDelegate.swift
【讨论】:
Cocoa-Touch,我的回答是对的。
您可能想阅读Files and Initialization
例外是一个名为“main.swift”的特殊文件,它的行为很多 就像一个游乐场文件,但使用您的应用程序的源代码构建。这 “main.swift”文件可以包含顶层代码,以及顺序相关的 规则也适用。实际上,运行的第一行代码 “main.swift”被隐式定义为 程序。这允许最小的 Swift 程序是一行 - 只要该行在“main.swift”中。
在 Xcode 中,Mac 模板默认包含一个“main.swift”文件,但是 对于 iOS 应用程序,新 iOS 项目模板的默认设置是添加 @UIApplicationMain 到一个常规的 Swift 文件。这会导致编译器 为您的 iOS 应用程序合成一个主要入口点,并消除 需要一个“main.swift”文件。
或者,您可以链接到 main 编写的实现 Objective-C,在增量迁移项目时很常见 从 Objective-C 到 Swift。
【讨论】:
普通 Swift 模块中的入口点是模块中名为 main.swift 的文件。 main.swift 是唯一允许在顶层包含表达式和语句的文件(模块中的所有其他 Swift 文件只能包含声明)。
Cocoa Touch 在UIApplicationDelegate 的实现上使用@UIApplicationMain attribute 而不是main.swift 文件来标记入口点。 Cocoa 过去使用最小的main.swift 文件,它简单地称为NSApplicationMain,但as of Xcode 6.1 在NSApplicationDelegate 的实现上使用@NSApplicationMain attribute。
【讨论】:
main.swift 文件。这个文件的位置是什么?
main.swift 位于 Supporting Files 组中,简单配置为调用 NSApplicationMain。
main.swift。