Swift項目的main函數(shù)消失了

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


截屏2020-12-10 下午4.59.05.png

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ù)其實還是存在的


1607591597556.jpg

應(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ù)字,也許這是出于安全性考慮吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容