當我們在寫OC項目的時候,會有一個main.m文件,里面有一個main函數(shù),在這個函數(shù)中喚醒app。

main函數(shù)作為程序啟動后的第二個函數(shù)被調(diào)用,然后在main函數(shù)中再啟動UIApplication,并綁定AppDelegate。
Swift項目中的main函數(shù)為何隱藏
當我們創(chuàng)建一個Swift項目的時候,發(fā)現(xiàn)沒有了main.swift文件,這是我們慌了,為什么呢?哈哈哈,官方的解釋是這樣的
In Xcode, Mac templates default to including a
“main.swift” file, but for iOS apps the default for new
iOS project templates is to add @UIApplicationMain to a
regular Swift file. This causes the compiler to synthesize
a mainentry point for your iOS app, and eliminates the
need for a “main.swift” file.
這段話的意思是,Swift項目中添加了@UIApplicationMain到swift文件中,使得編譯器合成了一個app入口,所以不需要main.swift文件
細心的同學會發(fā)現(xiàn)AppDelegate文件中多了個@UIApplicationMain的標志,啟動app并打斷點,發(fā)現(xiàn)main函數(shù)其實還是存在的

應(yīng)該是蘋果認為我們并不需要自行配置app入口,所以干脆簡化了項目配置,使用更加簡單的方式啟動應(yīng)用,但是有時候我們可能需要自己配置入口,例如創(chuàng)建UIApplication的子類時
main.swift
如果你希望通過自行配置入口的方式來創(chuàng)建一個UIApplication子類,那么就要創(chuàng)建一個main.swfit文件
首先創(chuàng)建一個swift文件,命名為main
main.swift中代碼如下
import Foundation
import UIKit
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(UIApplication), NSStringFromClass(AppDelegate))
這里把UIApplication換成你自定義的Application
寫好main.swift后,需要把AppDelegate中的@UIApplicationMain注釋掉,重新運行項目即可。
main函數(shù)的參數(shù)
以前OC的main函數(shù)的argv參數(shù)是一個字符串指針,打印出來后是應(yīng)用程序的路徑。swift中main函數(shù)的 Process.unsafeArgv 參數(shù)變成了一串十六進制數(shù)字,應(yīng)該也是代表應(yīng)用程序地址。至于為何要修改成數(shù)字,也許這是出于安全性考慮吧