快速代码执行的切入点是什么?


105

没有main()快速的方法。该程序必须从某处开始执行。那么快速执行代码的切入点是什么,它是如何确定的?

Answers:


94

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

Cocoa Touch 在的实现中使用@UIApplicationMain属性UIApplicationDelegate而不是main.swift文件来标记入口点。可可曾经使用了一个main.swift简单的最小文件NSApplicationMain,但是从Xcode 6.1开始,它在的实现上使用@NSApplicationMain属性NSApplicationDelegate


4
我创建了一个新的xcode项目,但在main.swift任何地方都找不到文件。该文件的位置在哪里?
Selvin 2014年

在Cocoa和Cocoa Touch中,应用程序main.swift位于Supporting Files组中,并且只需将其配置为即可NSApplicationMain
森2014年

4
支持文件组中没有它。它不在项目中的任何地方。
Selvin 2014年

1
抱歉,我对可可粉接触不对,但对可可粉却是正确的。请参阅我的最新答案
森2014年

当然,即使在Cocoa Touch中,您也可以创建和使用main.swift
Sulthan 2014年

40

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

基本上:main.m并且AppDelegate.m被合并SwiftAppDelegate.swift


2
@nathan他标记了iOS8Cocoa-Touch我的答案是正确的。

很好,我想知道如何将main.m更改为swift,却找不到任何东西。
哈利勒

28

您可能需要阅读文件和初始化

例外情况是一个名为“ main.swift”的特殊文件,其行为与游乐场文件非常相似,但使用您应用程序的源代码构建。“ main.swift”文件可以包含顶层代码,并且依赖于顺序的规则也适用。实际上,将在“ main.swift”中运行的第一行代码隐式定义为程序的主要入口点。只要最小的Swift程序在“ main.swift”中,它就可以是一行。

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

另外,您可以链接以Objective-C编写的main的实现,这在将项目从Objective-C逐步迁移到Swift时很常见。


3
我发现这是对如何在iOS中设置入口点的更好,更高层次的解释。
史蒂文

好的答案,很好的链接。然后,我找到了放置需要“尽早”运行的代码的好地方。而不是使用应用程序委托方法之一,我只是在应用程序委托上重写init,然后在此处进行操作。我用它来设置默认的日志记录级别。
查尔斯

1

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

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

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

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

如果您想了解更多有关swift编译器Main如何处理属性,操作系统如何知道应用程序的入口点的信息,建议您阅读以下文章:了解iOS应用程序入口点


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.