Cocoa touch swift代码执行的切入点是什么?

Cocoa touch swift代码执行的切入点是什么?,cocoa-touch,swift,ios8,Cocoa Touch,Swift,Ios8,swift中没有main()方法。程序必须从某处开始执行。那么,swift代码执行的入口点是什么?它是如何决定的?普通swift模块中的入口点是名为main.swift的模块中的文件main.swift是唯一允许在顶层包含表达式和语句的文件(模块中的所有其他swift文件只能包含声明) Cocoa Touch在实现上使用而不是main.swift文件来标记入口点。Cocoa过去使用一个最小的main.swift文件,该文件仅称为NSApplicationMain,但在AppDelegate.sw

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

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


Cocoa Touch在实现上使用而不是
main.swift
文件来标记入口点。Cocoa过去使用一个最小的
main.swift
文件,该文件仅称为
NSApplicationMain
,但在
AppDelegate.swift
文件中的
@UIApplicationMain
的实现中使用。
AppDelegate是初始条目文件

基本上:
main.m
AppDelegate.m
Swift
中有点合并成了
AppDelegate.Swift

您可能需要阅读

例外是一个名为“main.swift”的特殊文件,它的行为非常简单 类似于游乐场文件,但使用应用程序的源代码构建。这个 “main.swift”文件可以包含顶级代码,并且与订单相关 规则也适用。实际上,要运行的第一行代码 “main.swift”隐式定义为 节目。这使得最小Swift程序可以是一行- 只要那一行是“main.swift”

在Xcode中,Mac模板默认包含一个“main.swift”文件,但是 对于iOS应用程序,新iOS项目模板的默认设置是添加 @UIApplicationMain到常规Swift文件。这会导致编译器崩溃 为您的iOS应用程序合成一个主要入口点,并消除 需要一个“main.swift”文件

或者,您可以链接到以书面形式编写的main的实现中 Objective-C,从增量迁移项目时常见 目标C到Swift


在Swift应用程序中,有以下属性:

  • @UIApplicationMain
    (可可触摸)
  • @NSApplicationMain
    (Cocoa)
告诉swift编译器应用程序的入口点在哪里

swift编译器在幕后的作用是创建一个
main
函数,该函数基本上与Objective-C应用程序中的函数相同,并将此方法视为应用程序的入口点(应用程序进程启动时调用的第一个方法)


如果您想了解更多有关swift编译器如何处理
Main
属性的信息,操作系统如何知道应用程序的入口点在哪里,我鼓励您阅读本文:

在Swift 5.3中,有一个新的
@main
属性,它允许您控制项目的入口点,而不仅仅是
main.Swift
。只能有一个主条目,不能有
main.swift
文件和属性
@main
。有关更多详细信息,请参阅

@main
struct App {
    static func main() {
        print("Starting.")
    }
}

我创建了一个新的xcode项目,但在任何地方都找不到
main.swift
文件。此文件的位置是什么?在Cocoa和Cocoa Touch应用程序中,
main.swift
位于支持文件组中,并且仅配置为调用
NSApplicationMain
。不,它不在支持文件组中。这不是项目中的任何地方。对不起,我对Cocoa Touch的看法是错误的,但对Cocoa的看法是正确的。查看我的最新答案当然,即使在Cocoa Touch中,您也可以创建和使用
main.swift
@nathan,他标记了iOS8,这就是
Cocoa Touch
,我的答案是正确的。很好,我想知道如何将main.m改为swift,但我没有发现任何东西。我发现这是一个更好、更高层次的解释,说明了如何在iOS中设置入口点。回答不错,链接也不错。然后,我找到了一个好地方来放置需要“尽早”运行的代码。我没有使用某个app委托方法,而是在app委托上重写init,并在那里执行。例如,我使用它来设置默认日志记录级别。