【问题标题】:What is the entry point of swift code execution?快速代码执行的入口点是什么?
【发布时间】:2016-12-21 16:19:32
【问题描述】:

swift 中没有main() 方法。程序必须从某个地方开始执行。那么swift代码执行的切入点是什么,又是如何决定的呢?

【问题讨论】:

    标签: cocoa-touch swift ios8


    【解决方案1】:

    在 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.")
        }
    }
    

    【讨论】:

      【解决方案2】:

      在 Swift 应用中有属性:

      • @UIApplicationMain(可可触摸)
      • @NSApplicationMain(可可)

      告诉 swift 编译器应用程序的入口点在哪里。

      swift 编译器在后台所做的是它创建了一个main 函数,该函数看起来与 Objective-C 应用程序中的基本相同,并将此方法视为应用程序的入口点(应用程序调用的第一个方法)进程开始)。

      如果您想了解更多关于 swift 编译器对Main 属性的作用,操作系统如何知道应用程序的入口点在哪里,我鼓励您阅读这篇文章:Understanding iOS app entry point

      【讨论】:

        【解决方案3】:

        AppDelegate.swift 文件中,您可以看到@UIApplicationMain
        AppDelegate 是初始入口文件。

        基本上:main.mAppDelegate.m 有点合并到 SwiftAppDelegate.swift

        【讨论】:

        • @nathan He 标记了iOS8,那是Cocoa-Touch,我的回答是对的。
        • 很好,我想知道如何将 main.m 更改为 swift,但我没有找到任何东西。
        【解决方案4】:

        您可能想阅读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。

        【讨论】:

        • 我发现这是对如何在 iOS 中设置入口点的更好和更高级别的解释。
        • 不错的答案和良好的链接。然后我找到了一个放置需要“早期”运行的代码的好地方。我没有使用应用程序委托方法之一,而是简单地覆盖应用程序委托上的 init,并在那里执行。我用过它,例如设置默认日志记录级别。
        【解决方案5】:

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

        Cocoa Touch 在UIApplicationDelegate 的实现上使用@UIApplicationMain attribute 而不是main.swift 文件来标记入口点。 Cocoa 过去使用最小的main.swift 文件,它简单地称为NSApplicationMain,但as of Xcode 6.1NSApplicationDelegate 的实现上使用@NSApplicationMain attribute

        【讨论】:

        • 我创建了一个新的 xcode 项目,但我无法在任何地方找到 main.swift 文件。这个文件的位置是什么?
        • 在 Cocoa 和 Cocoa Touch 应用程序中,main.swift 位于 Supporting Files 组中,简单配置为调用 NSApplicationMain
        • 不,它不在支持文件组中。它不在项目的任何地方。
        • 对不起,我对 Cocoa Touch 的看法是错误的,但对 Cocoa 的看法是正确的。查看我的更新答案
        • 当然,即使在 Cocoa Touch 中你也可以创建和使用main.swift
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-19
        • 2015-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多