私は最初のSwiftプロジェクトを作成しましたAppDelegate.swift
が、クラス宣言の上に行があります-なぜそこにあるのですか?!
...
import UIKit
import CoreData
@UIApplicationMain // <- WHY IS IT HERE?
class AppDelegate: UIResponder, UIApplicationDelegate {
...
回答:
@UIApplicationMain
Swiftの属性はmain.m
、Objective-Cプロジェクトにある些細なファイルを置き換えます(その目的はmain
、すべてのCプログラムのエントリポイントである関数を実装し、UIApplicationMain
し、Cocoa Touchの実行ループとアプリインフラストラクチャを開始するためにことです)。
Objective-Cでは、UIApplicationMain
関数が提供するアプリごとの構成の主な(heh)ビットは、アプリのカスタムクラスの1つを共有UIApplication
オブジェクトのデリゲートとして指定することです。Swiftでは、クラスの宣言に属性を追加することで、@UIApplicationMain
このクラスを簡単に指定できます。(UIApplicationMain
理由がある場合は、関数を直接呼び出すこともできます。Swiftでは、その呼び出しをmain.swift
ファイルの最上位コードに入れます。)
@UIApplicationMain
iOS専用です。OS Xでは、アプリデリゲートは従来Info.plistで指定されたメインペン先ファイルに設定されます(SwiftでもObjCと同じ)が、OS Xストーリーボードにはメインペン先ファイルがないため@NSApplicationMain
、同じことが行われます。
UIApplicationMain
は今あります。developer.apple.com/library/ios/documentation/Swift/Conceptual/...
@UIApplicationMain属性は、アプリケーションを起動するためのmain.mファイルとエントリポイントの代わりになります。
この@UIApplicationMainがなくてもプログラムが機能するもう1つのことは、コメント// @ UIApplicationMain`がObjectivecの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のソースファイルには、2つの主要な機能があります。
アプリへのエントリポイントと、入力イベントをアプリに配信する実行ループを作成します。この作業は、ファイルの先頭に表示されるUIApplicationMain 属性(@UIApplicationMain)によって実行されます。UIApplicationMainは、アプリのライフサイクルの管理を担当するアプリケーションオブジェクトとアプリデリゲートオブジェクトを作成します。
これは、アプリデリゲートオブジェクトの青写真であるAppDelegateクラスを定義します。アプリデリゲートは、アプリのコンテンツが描画されるウィンドウを作成し、アプリ内の状態遷移に応答する場所を提供します。AppDelegateクラスは、カスタムアプリレベルのコードを記述する場所です。
Swiftのドキュメントが更新されたので、関連する箇所は次のとおりです。
NSApplicationMain
この属性をクラスに適用して、それがアプリケーションデリゲートであることを示します。この属性を使用することは、NSApplicationMain(: :)関数を呼び出し、このクラスの名前をデリゲートクラスの名前として渡すことと同じです。
この属性を使用しない場合は、main.swiftファイルにNSApplicationMain(: :)関数を呼び出すmain()関数を指定してください。たとえば、アプリがNSApplicationのカスタムサブクラスをプリンシパルクラスとして使用している場合、この属性を使用する代わりにNSApplicationMain関数を呼び出します。