Cocoa touch swift代码执行的切入点是什么?
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
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,并在那里执行。例如,我使用它来设置默认日志记录级别。