Swift中main函數(shù)去哪了痹屹?

這篇文章我是基于Swift 3下寫的章郁,有些東西,可能會跟之前版本有些出入志衍,不過影響不大

從我們一開始學C語言的時候暖庄,就知道main()函數(shù)是一個程序的entry point,這是約定俗成的東西楼肪,當然培廓,iOS APP 也不例外。

之前我們用Xcode新建一個項目春叫,選擇Objective-C作為開發(fā)語言肩钠,建成的工程里面除了AppDelegate.mMain.storyboard等再熟悉不過的文件暂殖,還有一個main.m价匠,既熟悉又陌生。

int main(int argc, char * argv[]) {
    @autoreleasepool {
        MCSLog(@"%s", argv[0]);
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

同樣的呛每,這也是我們一個iOS 程序的入口踩窖,調(diào)用UIApplicationMain函數(shù)注冊了Application代理,開始了事件循環(huán)莉给。

不過毙石,當我們新建一個Swift工程的時候,細心的同學就會發(fā)現(xiàn)颓遏,找不到我們熟悉的main.swift文件了徐矩,同時我們也會在AppDelegate.swift里,發(fā)現(xiàn)一個@UIApplicationMainAttribute叁幢。
官方文檔這么描述的:

UIApplicationMain
Apply this attribute to a class to indicate that it’s the application delegate. 
Using this attribute is equivalent to calling the UIApplicationMain function and passing this class’s name as the name of the delegate class.

還有Stack上的回答也很詳細滤灯,建議看看。

原來曼玩,@UIApplicationMain就是為了取代我們在OC項目中的main.m鳞骤,它實現(xiàn)了main函數(shù)(程序入口)以及調(diào)用了Cocoa Touch上的UIApplicationMain 函數(shù),開啟事件循環(huán)黍判。

應用了這個 UIApplicationMain Attribute也就表明豫尽,當前類作為application的代理,也就等同于這個函數(shù)的調(diào)用UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
因此顷帖,你也可以簡單認為美旧,AppDelegate.swiftmain.swift通過這個Attribute合并為一體了渤滞,AppDelegate.swift也成為initial entry file.

那么,你自己新建MyAppDelegate.swift榴嗅,然后Apply @UIApplicationMain妄呕,同樣也是可以的

// 使用@UIApplicationMain,必須要遵循UIApplicationDelegate嗽测,不然編譯器會報如下錯誤
// 'UIApplicationMain' class must conform to the 'UIApplicationDelegate' protocol
@UIApplicationMain
class MyAppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
}

到這里绪励,可能有些同學就會問,那我自己建個main.swift文件呢唠粥?當然可以疏魏!
新建一個main.swift,這里注意一點厅贪,文件名稱必須是main.swift, 然后實現(xiàn)如下:

import UIKit
import Foundation

// Swift 2 使用Process.argc
let argc = CommandLine.argc // Swift 3 把 Process改為CommandLine 了
let argv = UnsafeMutablePointer<UnsafeMutablePointer<Int8>>.allocate(capacity: Int(CommandLine.argc))
// let argv = UnsafeMutableRawPointer(CommandLine.unsafeArgv).bindMemory(to: UnsafeMutablePointer<Int8>.self, capacity: Int(CommandLine.argc))
UIApplicationMain(argc, argv, nil, NSStringFromClass(AppDelegate.self))

這里注意一點:如果你自己創(chuàng)建了main.swift蠢护,那么記得把@UIApplicationMain去掉雅宾,不然會報錯
'UIApplicationMain' attribute cannot be used in a module that contains top-level code

@UIApplicationMain 只是在iOS上养涮,Mac OS上相應的是@NSApplicationMain

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市眉抬,隨后出現(xiàn)的幾起案子贯吓,更是在濱河造成了極大的恐慌,老刑警劉巖蜀变,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悄谐,死亡現(xiàn)場離奇詭異,居然都是意外死亡库北,警方通過查閱死者的電腦和手機爬舰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寒瓦,“玉大人情屹,你說我怎么就攤上這事≡友” “怎么了垃你?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喂很。 經(jīng)常有香客問我惜颇,道長,這世上最難降的妖魔是什么少辣? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任凌摄,我火速辦了婚禮,結(jié)果婚禮上漓帅,老公的妹妹穿的比我還像新娘锨亏。我一直安慰自己林说,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布屯伞。 她就那樣靜靜地躺著腿箩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪劣摇。 梳的紋絲不亂的頭發(fā)上珠移,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音末融,去河邊找鬼钧惧。 笑死,一個胖子當著我的面吹牛勾习,可吹牛的內(nèi)容都是我干的浓瞪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼巧婶,長吁一口氣:“原來是場噩夢啊……” “哼乾颁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起艺栈,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤英岭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后湿右,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诅妹,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年毅人,在試婚紗的時候發(fā)現(xiàn)自己被綠了吭狡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡丈莺,死狀恐怖划煮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情场刑,我是刑警寧澤般此,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站牵现,受9級特大地震影響铐懊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞎疼,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一科乎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贼急,春花似錦茅茂、人聲如沸捏萍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽令杈。三九已至,卻和暖如春碴倾,著一層夾襖步出監(jiān)牢的瞬間逗噩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工跌榔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留异雁,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓僧须,卻偏偏與公主長得像纲刀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子担平,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 2017年11月12日這一天做了我來澳洲8年最最最瘋狂的決定示绊,沒有之一,City 2 Sea 15km驱闷。 決定是一...
    Maple_鄭小波閱讀 224評論 0 1
  • 當周圍有人突然升職空另、買了新房子、新車子或者擁有了更強的能力蹋砚,我們會想“為什么不是我呢”扼菠、“他是怎么做到的呢?”進而...
    成長范閱讀 1,136評論 0 0
  • 1坝咐、人在戀愛的時候最詩味循榆,從“三百篇”、《離騷》及西洋《圣經(jīng)·雅歌》墨坚、希臘的古詩直到現(xiàn)在秧饮,對戀愛還在贊美、...
    舊時月色2017閱讀 438評論 1 0