我需要帮助了解何时使用 @main
对比 @uiapplicationmain
.
据我所知,@uiapplicationmain
是一种更简单的方式来调用 uiapplicationmain(:::)
在 @uiapplicationmain
之后创建的类在哪里用作应用程序代理。我也知道它还会创建一个 UIApplication
.
我也知道应用程序委托(delegate)成为项目的入口点。
根据我所读到的内容,我被告知 @main
也是一个入口点,但它需要一个 main 函数。
我想知道的是它们的主要入口点是什么意思。就像 Xcode 为使其成为“入口”点所做的那样。以及如何整@main
事情有效,因为它与 @uiapplicationmain
有何不同以及它对 Xcode 运行代码的方式有何影响。
最佳答案
所有代码都有一个入口点:调用该代码的人实际调用的地方。由许多 Swift 文件组成的整个程序实际上是如何开始的?我们需要整个程序的入口点,运行时将调用它来启动我们。
在 Swift 中,这是 main.swift 文件。它的工作是调用 UIApplicationMain,它创建一些实例,包括应用程序和应用程序委托(delegate),并使事件循环运行(并在应用程序运行的其余时间保持运行)。最小的 main.swift 文件必须如下所示:
import UIKit
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv, nil,
NSStringFromClass(AppDelegate.self)
)
然而,从来没有人使用过 main.swift 文件!它是样板文件,所以何必呢?相反,你说 @main
,并在幕后为您生成一个 main.swift 文件。特别是,你把属性@main
在您的 AppDelegate 类上,因此 main.swift 生成器知道将哪个类实例化为您的应用程序委托(delegate)。还有两件事要知道:
@main
被称为 @UIApplicationMain
反而。从这个角度来看,它们是相同的,同一事物的两个名称。@main
并给它一个静态 main
函数,您可以在其中执行您在 main.swift 文件中所做的任何操作。那是什么@UIApplicationMain
无法做到: @main
struct MyMain {
static func main() -> Void {
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self)
)
}
}
关于swift - @main 和 @uiapplicationmain 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67429098/