swift - @main 和 @uiapplicationmain 有什么区别

标签 swift uikit

我需要帮助了解何时使用 @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)。
还有两件事要知道:
  • 在 Swift 5.3 之前,@main被称为 @UIApplicationMain反而。从这个角度来看,它们是相同的,同一事物的两个名称。
  • Swift 5.3 和 Xcode 12 中的新功能,您可以将自己的类型之一指定为 @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/

    相关文章:

    swift - 通过触摸该单元格内的按钮来删除 UITableViewCell

    ios - 启用/禁用 TableView 单元格 - iOS - Swift

    ios - 声明没有类型的变量

    ios - 字符串数组未使用 ObjectMapper 保存到 Realm 对象

    ios - 在 iOS 中是否可以将支持 ascii 的小数位作为 UITextfield 键盘类型的键盘类型?

    iPhone 范围 slider

    ios - 创建自定义 UITableView 分隔线

    ios - UIPageControl 显示当前页面

    iphone - 现在运行事件指示器

    iphone - @property 是 Interface Builder 所必需的吗?