我刚创建了我的第一个Swift项目,在AppDelegate.swift
上面有一个类声明上面的一行 - 为什么它在那里?!
...
import UIKit
import CoreData
@UIApplicationMain // <- WHY IS IT HERE?
class AppDelegate: UIResponder, UIApplicationDelegate {
...
答案 0 :(得分:114)
Swift中的@UIApplicationMain
属性取代了Objective-C项目中的普通main.m
文件(其目的是实现main
函数,该函数是所有项的入口点C程序并调用UIApplicationMain
启动Cocoa Touch运行循环和应用程序基础架构。
在Objective-C中,UIApplicationMain
函数提供的每个应用程序配置的主要(heh)位指定了一个应用程序的自定义类作为共享{{1}的委托对象。在Swift中,您可以通过将the @UIApplicationMain
attribute添加到该类来轻松指定此类&#39;宣言。 (如果你有理由,你也可以直接调用UIApplication
函数。在Swift中,你将该调用放在UIApplicationMain
文件中的顶级代码中。)
main.swift
仅适用于iOS。在OS X中,app委托传统上设置在Info.plist指定的主nib文件中(对于Swift和ObjC相同) - 但是对于OS X故事板,没有主nib文件,所以{{1在那里做同样的事情。
答案 1 :(得分:8)
@UIApplicationMain属性是main.m文件的替代品。和应用程序的入口点。
如果没有这个@UIApplicationMain,您的程序可以工作的另一件事就是注释// @ UIApplicationMain` 在目标c中创建与main.m相同的main.swift,并在下面编写代码。 这将是您的申请的入口点
import Foundation
class FLApplication: UIApplication
{
override func sendEvent(event: UIEvent!)
{
println("Entry Point") // this is an example
}
}
答案 2 :(得分:7)
AppDelegate.swift 源文件有两个主要功能:
它创建了应用程序的入口点和提供的运行循环 向您的应用输入事件。这项工作由 UIApplicationMain 完成 属性(@ UIApplicationMain),出现在顶部 文件。 UIApplicationMain创建一个应用程序对象 负责管理应用程序和应用程序的生命周期 委托对象。
它定义了 AppDelegate 类,即app委托对象的蓝图。应用程序委托创建了一个窗口,用于绘制应用程序的内容,并提供响应应用程序内状态转换的位置。您可以在AppDelegate类中编写自定义应用级代码。
答案 3 :(得分:3)
现在Swift文档已更新,以下是相关段落:
<强> NSApplicationMain 强>
将此属性应用于类以指示它是应用程序委托。使用此属性等同于调用NSApplicationMain(: :)函数并将此类的名称作为委托类的名称传递。
如果不使用此属性,请提供带有main()函数的main.swift文件,该函数调用NSApplicationMain(: :)函数。例如,如果您的应用程序使用NSApplication的自定义子类作为其主要类,请调用NSApplicationMain函数而不是使用此属性。
答案 4 :(得分:0)
@UIApplicationMain 是应用于下面的类-declared的属性 - AppDelegate ,以提供有关此类的更多信息。
在这种情况下,属性 @UIApplicationMain 表示类 AppDelegate 是您应用的应用代理。
答案 5 :(得分:0)
<强> UIApplicationMain 强> 将此属性应用于类以指示它是应用程序委托。使用此属性等效于调用UIApplicationMain函数并将此类的名称作为委托类的名称传递。 (Source)