“@UpppplicationMain”是什么意思?

时间:2014-07-01 17:38:27

标签: swift

我刚创建了我的第一个Swift项目,在AppDelegate.swift上面有一个类声明上面的一行 - 为什么它在那里?!

...
import UIKit
import CoreData

@UIApplicationMain // <- WHY IS IT HERE?
class AppDelegate: UIResponder, UIApplicationDelegate {
... 

6 个答案:

答案 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函数而不是使用此属性。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html

答案 4 :(得分:0)

@UIApplicationMain 是应用于下面的类-declared的属性 - AppDelegate ,以提供有关此类的更多信息。

在这种情况下,属性 @UIApplicationMain 表示类 AppDelegate 是您应用的应用代理。

答案 5 :(得分:0)

<强> UIApplicationMain 将此属性应用于类以指示它是应用程序委托。使用此属性等效于调用UIApplicationMain函数并将此类的名称作为委托类的名称传递。 (Source)