Hello World App是如何工作的
創(chuàng)建一個app是不是很簡單印叁?我想你閱讀第一章時一定很開心被冒,并且已經(jīng)創(chuàng)建了你的第一個iPhone app。
在我們繼續(xù)介紹iOS SDK之前轮蜕,我們稍微停一下姆打,并且深入觀察一下Hello World app。這對你理解Swift語言基礎(chǔ)和app內(nèi)部的工作原理有好處肠虽。
迄今為止你一步一步創(chuàng)建了Hello World app幔戏。隨著你閱讀上一章,你心里可能會想:
1税课、storyboard中的View Controller是如何和ViewController.swift中的ViewController類建立聯(lián)系的闲延?
2、showmessage()方法中的代碼塊的含義是韩玩?它們是如何通知iOS顯示一條Hello World消息的
3垒玲、關(guān)鍵字@IBAction的含義是什么
4、“Hello World”按鈕后面隱藏些什么找颓?按鈕時如何檢測到按下并且觸發(fā)showmessage()方法的合愈?
5、Run按鈕時如何工作的击狮?編譯一個app是什么意思佛析?
我希望你們專注于探索Xcode的開發(fā)環(huán)境,所以現(xiàn)在我不打算解釋上面任何一個問題彪蓬。但是對于每個開發(fā)人員來說理解代碼背后的細(xì)節(jié)和掌握iOS編程的基本概念都是最基本的要求寸莫。技術(shù)的概念可能有一點難以理解,特別是档冬,當(dāng)你沒有任何編程經(jīng)驗的時候膘茎。不要擔(dān)心桃纯,因為現(xiàn)在才剛剛開始。隨著你不斷的學(xué)習(xí)和編寫更多的代碼披坏,你將會更深入的理解iOS編程态坦。請盡你的最大努力去學(xué)習(xí)。
讓我們看一個真實生活中的例子
例如一個電視遙控器棒拂。使用遙控器無線控制電視的聲音非常的方便伞梯。要切換頻道,你按一下頻道數(shù)字就可以了着茸。要提高音量壮锻,你按音量+按鈕就可以。
那我現(xiàn)在就問了涮阔。你知道當(dāng)你按下音量或者頻道按鈕之后發(fā)生了什么嗎猜绣?很可能不知道吧。我相信絕大多數(shù)人都不懂電視遠(yuǎn)端無線通信敬特。你可以認(rèn)為掰邢,遙控器發(fā)出了一條確切的消息給電視,并且觸發(fā)了聲音變大或者頻道切換伟阔。
在這個例子匯總辣之,和你交換的按鈕相當(dāng)于用戶界面,在按鈕后面的細(xì)節(jié)相當(dāng)于具體措施皱炉。界面通過消息和具體措施之間通信怀估。?
這個概念在iOS編程領(lǐng)域是普遍使用的。在storyboard中的界面就是用戶界面合搅,程序代碼就是具體措施多搀。界面元素(如按鈕)經(jīng)由消息和代碼之間通信。
特別的灾部,我們回來看Hello World工程康铭,我們添加的按鈕就是界面。在ViewController類中的showMessage()方法就是具體措施赌髓。當(dāng)有人點擊按鈕時从藤,按鈕發(fā)出一條“顯示消息”的消息給ViewController激活showMessage()方法調(diào)用。
我們現(xiàn)在展示的就是面向?qū)ο缶幊讨蟹浅V匾囊粋€概念封裝锁蠕。showMessage()的具體實現(xiàn)相對外部世界(界面)是隱藏的夷野。Hello world按鈕并不知道showMessage()方法是如何工作的。它僅僅知道需要發(fā)送一條消息匿沛。ShowMessage()方法處理如何在屏幕中顯示“Hello World”消息扫责。
在點擊背后
現(xiàn)在你知道UI中的按鈕和代碼通過消息通信。讓我們仔細(xì)看一下當(dāng)用戶點擊“Hello World”按鈕后真正發(fā)生了什么逃呼”罟拢“Hello World”按鈕是如何調(diào)用showMessage()方法的?
你還記得你在Interface Builder中是如何建立“Hello World”按鈕和showMessage事件之間聯(lián)系的嗎抡笼?再次打開Main.storyboard選擇“Hello World”按鈕苏揣。點擊工具區(qū)域的連接觀察器。在發(fā)送事件段(Sent Event)推姻,你會看見一系列可用的事件和相應(yīng)的方法調(diào)用平匈。正如你在下面的圖中看到的,“Touch Up Inside”事件和showMessage()方法連接在一起藏古。
在iOS中增炭,app是基于事件驅(qū)動編程。無論是系統(tǒng)對象還是UI對象拧晕,都監(jiān)聽特定的事件決定app下面的行為隙姿。對于UI對象(例如按鈕),可能監(jiān)聽專門的點擊事件厂捞。當(dāng)事件發(fā)生输玷,對象調(diào)用這個事件預(yù)設(shè)的方法。
在Hello?World app中靡馁,當(dāng)用戶抬起在按鈕中間的手指時欲鹏,“Touch Up Inside”事件被觸發(fā)。然后按鈕調(diào)用showMessage()方法顯示“Hello World”消息臭墨。我們使用“Touch Up Inside”事件替代“Touch Down”事件因為要避免意外或者虛假按擊赔嚎。圖2-3 總結(jié)了我們描述的事件流程。
showMessage方法內(nèi)部
現(xiàn)在你對iOS編程理解是不是更深了一點胧弛。但是showMessage()方法里面的代碼是什么意思呢尤误?
首先,什么是方法叶圃?像我們之前提到的袄膏,在app中大多數(shù)代碼都是以某種方法處理某種對象。每一個對象提供特定的功能和執(zhí)行特定的行為(例如:在屏幕上顯示一條消息)掺冠。這些功能通過代碼表達(dá)就是方法沉馆。
現(xiàn)在,讓我們仔細(xì)看一下showMessage()方法德崭。
在Swift中我們使用func關(guān)鍵字在類里聲明方法斥黑。在func關(guān)鍵字后面的是方法名。方法名標(biāo)識了方法眉厨,并且方便我們在程序的其他地方調(diào)用锌奴。方法可以有輸入?yún)?shù)。參數(shù)定義在一對圓括號之間憾股。在我們的例子里鹿蜀,這個方法不需要任何參數(shù)箕慧。在這種情況下,我們簡單的寫一對空的圓括號茴恰。
方法里面還有一個關(guān)鍵字我們沒有談到颠焦。就是@IBAction。這個關(guān)鍵字允許你將你的代碼和Interface Bulilder中的用戶界面之間建立關(guān)聯(lián)往枣。當(dāng)它在方法聲明中出現(xiàn)時伐庭,暗示Interface Builder可以看到這個方法。這就是為什么可以在第一章中建立Hello World按鈕和代碼之間聯(lián)系時的彈出窗口中看到showMessage的原因分冈。
好了圾另,方法聲明介紹完了。讓我們討論一下大括號之間的代碼塊雕沉。
大括號中中的代碼實現(xiàn)了方法需要實現(xiàn)的行為集乔。可喜的是蘑秽,在iOS開發(fā)過程中我們不需要編寫所有的代碼饺著。例如你不需要知道如何在屏幕中繪制警告框。你可以用iOS SDK框架中提供的工具類來完成這些活肠牲。iOS SDK包含了許多框架和開發(fā)套件幼衰,讓你的開發(fā)更加簡單。例如缀雳,UIKit框架提供了構(gòu)件和管理app用戶界面的類渡嚣。
這里我們依靠UIAlertController創(chuàng)建了Hello World 消息。UIAlertController對象為用戶顯示一條警告信息肥印。代碼的第一行創(chuàng)建一個UIAlertController對象识椰。依據(jù)一個類創(chuàng)建一個對象和調(diào)用方法非常類似。你只需指明類名深碱,并且提供一系列屬性初始值腹鹉。這里我們說明了警告框的title,message和style
在創(chuàng)建UIAlertController對象之后敷硅,我們調(diào)用addAction方法在警告框中增加了一個“OK”按鈕功咒。在Swift中,你可以通過點.語法調(diào)用方法绞蹦。
你可能會想力奋,如何才能知道類中有哪些方法并且如何使用?在Xcode中幽七,你可以按下Option鍵景殷,移動鼠標(biāo)到類名處(例如UIAlertController)并且點擊。將會出現(xiàn)一個關(guān)于類描述的彈出窗口。如果你想獲得更多信息你可以點擊藍(lán)色的鏈接猿挚。
當(dāng)UIAlertController對象的所有參數(shù)設(shè)置完畢咐旧,最后一行代碼是在屏幕上顯示這條警告信息。
在Swift中亭饵,使用self屬性引用當(dāng)前實例或者對象休偶。為了顯示警告框梁厉,我們通過View controller用彈出卡片形式展示alertController辜羊。
專題目錄:
第二章:使用Storyboard設(shè)計用戶界面(一)