我刚刚创建了我的第一个Swift项目,在AppDelegate.swift
类声明的上方有一行-为什么在那儿呢?
...
import UIKit
import CoreData
@UIApplicationMain // <- WHY IS IT HERE?
class AppDelegate: UIResponder, UIApplicationDelegate {
...
Answers:
@UIApplicationMain
Swift中的属性替换了main.m
在Objective-C项目中找到的琐碎文件(其目的是实现main
作为所有C程序的入口点并调用的功能)UIApplicationMain
以启动Cocoa Touch运行循环和应用程序基础结构)。
在Objective-C中,该UIApplicationMain
功能提供的每个应用程序配置的主要(heh)位是将应用程序的自定义类之一指定为共享UIApplication
对象的委托。在斯威夫特,你可以很容易地通过添加指定这个类的@UIApplicationMain
属性到类的声明。(UIApplicationMain
如果有必要,您仍然可以直接调用该函数。在Swift中,您可以将该调用放在main.swift
文件的顶级代码中。)
@UIApplicationMain
仅适用于iOS。在OS X中,传统上将应用程序委托设置在Info.plist指定的主nib文件中(对于Swift与ObjC相同),但是对于OS X故事板,没有主nib文件,因此@NSApplicationMain
也存在相同的事情。
UIApplicationMain
现在有一个描述。developer.apple.com/library/ios/documentation/Swift/Conceptual/...
@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
}
}
Foundation
进口的FLApplication
,没有任何使用子类的声明随机子类...很抱歉,但没有这个答案是有道理的,除了第一句。
所述AppDelegate.swift源文件具有两个主要功能:
它为您的应用程序创建入口点,并向您的应用程序传递输入事件的运行循环。这项工作由UIApplicationMain 属性(@UIApplicationMain)完成,该属性显示在文件顶部。UIApplicationMain创建一个负责管理应用程序生命周期的应用程序对象和一个应用程序委托对象。
它定义了AppDelegate类,即应用程序委托对象的蓝图。应用程序委托将创建绘制应用程序内容的窗口,并提供一个位置来响应应用程序内的状态转换。AppDelegate类是您编写自定义应用程序级代码的地方。
现在,Swift文档已更新,下面是相关段落:
NSApplicationMain
将此属性应用于类以指示它是应用程序委托。使用此属性等效于调用NSApplicationMain(: :)函数并将此类的名称作为委托类的名称传递。
如果不使用此属性,请为main.swift文件提供一个main()函数,该函数调用NSApplicationMain(: :)函数。例如,如果您的应用程序使用NSApplication的自定义子类作为其主体类,请调用NSApplicationMain函数,而不要使用此属性。