回答:
単純なSwiftモジュールのエントリポイントは、というモジュール内のファイルですmain.swift
。main.swift
トップレベルで式とステートメントを持つことが許可されている唯一のファイルです(モジュール内の他のすべてのSwiftファイルは宣言のみを含むことができます)。
Cocoa Touchは、ファイルではなく実装の@UIApplicationMain
属性を使用して、エントリポイントをマークします。Cocoa は、単にと呼ばれる最小限のファイルを使用していましたが、Xcode 6.1以降では、の実装で属性を使用しています。UIApplicationDelegate
main.swift
main.swift
NSApplicationMain
@NSApplicationMain
NSApplicationDelegate
main.swift
では、アプリケーションはSupporting Filesグループにあり、を呼び出すように構成されていますNSApplicationMain
。
main.swift
。
でAppDelegate.swift
ファイルあなたが見ることができます@UIApplicationMain
。
AppDelegateは初期エントリファイルです。
基本的に:main.m
とAppDelegate.m
ちょっとSwift
だけにマージされますAppDelegate.swift
ファイルと初期化を読むことをお勧めします
例外は、「main.swift」という名前の特別なファイルです。これは、プレイグラウンドファイルのように動作しますが、アプリのソースコードでビルドされます。「main.swift」ファイルにはトップレベルのコードを含めることができ、順序に依存するルールも適用されます。実際、「main.swift」で実行するコードの最初の行は、プログラムのメインエントリポイントとして暗黙的に定義されています。これにより、その行が「main.swift」にある限り、最小限のSwiftプログラムを1行にすることができます。
Xcodeでは、Macテンプレートのデフォルトは「main.swift」ファイルを含みますが、iOSアプリの場合、新しいiOSプロジェクトテンプレートのデフォルトは、@ UIApplicationMainを通常のSwiftファイルに追加することです。これにより、コンパイラはiOSアプリのメインエントリポイントを合成し、「main.swift」ファイルの必要性を排除します。
または、Objective-CからSwiftにプロジェクトを段階的に移行するときに一般的な、Objective-Cで記述されたmainの実装にリンクすることもできます。
Swiftアプリには属性があります:
@UIApplicationMain
(ココアタッチ)@NSApplicationMain
(ココア)これは、アプリケーションのエントリポイントがどこにあるかをSwiftコンパイラに伝えます。
迅速なコンパイラが内部で行うことは、main
基本的にObjective-Cアプリと同じように見え、このメソッドをアプリのエントリポイント(アプリケーションプロセスの開始時に呼び出される最初のメソッド)として扱う関数を作成することです。
SwiftコンパイラーがMain
属性を使用して行うこと、OSがアプリケーションのエントリーポイントがどこにあるかを知る方法について詳しく知りたい場合は、この記事を読むことをお勧めします:iOSアプリのエントリーポイントについて
Swift 5.3には、@main
プロジェクト内のエントリポイントの位置だけでなく、プロジェクト内の場所を制御できる新しい属性がありますmain.swift
。メインエントリは1つしか存在できず、main.swift
ファイルと属性を持つことはできません@main
。詳細については、https://github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.mdを参照してください。
@main
struct App {
static func main() {
print("Starting.")
}
}
main.swift
どこにもファイルが見つかりません。このファイルの場所は何ですか?