Hello World App是如何工作的
創(chuàng)建一個(gè)app是不是很簡(jiǎn)單?我想你閱讀第一章時(shí)一定很開(kāi)心,并且已經(jīng)創(chuàng)建了你的第一個(gè)iPhone app。
在我們繼續(xù)介紹iOS SDK之前,我們稍微停一下,并且深入觀察一下Hello World app。這對(duì)你理解Swift語(yǔ)言基礎(chǔ)和app內(nèi)部的工作原理有好處。
迄今為止你一步一步創(chuàng)建了Hello World app。隨著你閱讀上一章,你心里可能會(huì)想:
1、storyboard中的View Controller是如何和ViewController.swift中的ViewController類建立聯(lián)系的?
2、showmessage()方法中的代碼塊的含義是?它們是如何通知iOS顯示一條Hello World消息的
3、關(guān)鍵字@IBAction的含義是什么
4、“Hello World”按鈕后面隱藏些什么?按鈕時(shí)如何檢測(cè)到按下并且觸發(fā)showmessage()方法的?
5、Run按鈕時(shí)如何工作的?編譯一個(gè)app是什么意思?
我希望你們專注于探索Xcode的開(kāi)發(fā)環(huán)境,所以現(xiàn)在我不打算解釋上面任何一個(gè)問(wèn)題。但是對(duì)于每個(gè)開(kāi)發(fā)人員來(lái)說(shuō)理解代碼背后的細(xì)節(jié)和掌握iOS編程的基本概念都是最基本的要求。技術(shù)的概念可能有一點(diǎn)難以理解,特別是,當(dāng)你沒(méi)有任何編程經(jīng)驗(yàn)的時(shí)候。不要擔(dān)心,因?yàn)楝F(xiàn)在才剛剛開(kāi)始。隨著你不斷的學(xué)習(xí)和編寫(xiě)更多的代碼,你將會(huì)更深入的理解iOS編程。請(qǐng)盡你的最大努力去學(xué)習(xí)。
讓我們看一個(gè)真實(shí)生活中的例子
例如一個(gè)電視遙控器。使用遙控器無(wú)線控制電視的聲音非常的方便。要切換頻道,你按一下頻道數(shù)字就可以了。要提高音量,你按音量+按鈕就可以。
那我現(xiàn)在就問(wèn)了。你知道當(dāng)你按下音量或者頻道按鈕之后發(fā)生了什么嗎?很可能不知道吧。我相信絕大多數(shù)人都不懂電視遠(yuǎn)端無(wú)線通信。你可以認(rèn)為,遙控器發(fā)出了一條確切的消息給電視,并且觸發(fā)了聲音變大或者頻道切換。
在這個(gè)例子匯總,和你交換的按鈕相當(dāng)于用戶界面,在按鈕后面的細(xì)節(jié)相當(dāng)于具體措施。界面通過(guò)消息和具體措施之間通信。?
這個(gè)概念在iOS編程領(lǐng)域是普遍使用的。在storyboard中的界面就是用戶界面,程序代碼就是具體措施。界面元素(如按鈕)經(jīng)由消息和代碼之間通信。
特別的,我們回來(lái)看Hello World工程,我們添加的按鈕就是界面。在ViewController類中的showMessage()方法就是具體措施。當(dāng)有人點(diǎn)擊按鈕時(shí),按鈕發(fā)出一條“顯示消息”的消息給ViewController激活showMessage()方法調(diào)用。
我們現(xiàn)在展示的就是面向?qū)ο缶幊讨蟹浅V匾囊粋€(gè)概念封裝。showMessage()的具體實(shí)現(xiàn)相對(duì)外部世界(界面)是隱藏的。Hello world按鈕并不知道showMessage()方法是如何工作的。它僅僅知道需要發(fā)送一條消息。ShowMessage()方法處理如何在屏幕中顯示“Hello World”消息。
在點(diǎn)擊背后
現(xiàn)在你知道UI中的按鈕和代碼通過(guò)消息通信。讓我們仔細(xì)看一下當(dāng)用戶點(diǎn)擊“Hello World”按鈕后真正發(fā)生了什么?!癏ello World”按鈕是如何調(diào)用showMessage()方法的?
你還記得你在Interface Builder中是如何建立“Hello World”按鈕和showMessage事件之間聯(lián)系的嗎?再次打開(kāi)Main.storyboard選擇“Hello World”按鈕。點(diǎn)擊工具區(qū)域的連接觀察器。在發(fā)送事件段(Sent Event),你會(huì)看見(jiàn)一系列可用的事件和相應(yīng)的方法調(diào)用。正如你在下面的圖中看到的,“Touch Up Inside”事件和showMessage()方法連接在一起。
在iOS中,app是基于事件驅(qū)動(dòng)編程。無(wú)論是系統(tǒng)對(duì)象還是UI對(duì)象,都監(jiān)聽(tīng)特定的事件決定app下面的行為。對(duì)于UI對(duì)象(例如按鈕),可能監(jiān)聽(tīng)專門的點(diǎn)擊事件。當(dāng)事件發(fā)生,對(duì)象調(diào)用這個(gè)事件預(yù)設(shè)的方法。
在Hello?World app中,當(dāng)用戶抬起在按鈕中間的手指時(shí),“Touch Up Inside”事件被觸發(fā)。然后按鈕調(diào)用showMessage()方法顯示“Hello World”消息。我們使用“Touch Up Inside”事件替代“Touch Down”事件因?yàn)橐苊庖馔饣蛘咛摷侔磽簟D2-3 總結(jié)了我們描述的事件流程。
showMessage方法內(nèi)部
現(xiàn)在你對(duì)iOS編程理解是不是更深了一點(diǎn)。但是showMessage()方法里面的代碼是什么意思呢?
首先,什么是方法?像我們之前提到的,在app中大多數(shù)代碼都是以某種方法處理某種對(duì)象。每一個(gè)對(duì)象提供特定的功能和執(zhí)行特定的行為(例如:在屏幕上顯示一條消息)。這些功能通過(guò)代碼表達(dá)就是方法。
現(xiàn)在,讓我們仔細(xì)看一下showMessage()方法。
在Swift中我們使用func關(guān)鍵字在類里聲明方法。在func關(guān)鍵字后面的是方法名。方法名標(biāo)識(shí)了方法,并且方便我們?cè)诔绦虻钠渌胤秸{(diào)用。方法可以有輸入?yún)?shù)。參數(shù)定義在一對(duì)圓括號(hào)之間。在我們的例子里,這個(gè)方法不需要任何參數(shù)。在這種情況下,我們簡(jiǎn)單的寫(xiě)一對(duì)空的圓括號(hào)。
方法里面還有一個(gè)關(guān)鍵字我們沒(méi)有談到。就是@IBAction。這個(gè)關(guān)鍵字允許你將你的代碼和Interface Bulilder中的用戶界面之間建立關(guān)聯(lián)。當(dāng)它在方法聲明中出現(xiàn)時(shí),暗示Interface Builder可以看到這個(gè)方法。這就是為什么可以在第一章中建立Hello World按鈕和代碼之間聯(lián)系時(shí)的彈出窗口中看到showMessage的原因。
好了,方法聲明介紹完了。讓我們討論一下大括號(hào)之間的代碼塊。
大括號(hào)中中的代碼實(shí)現(xiàn)了方法需要實(shí)現(xiàn)的行為??上驳氖?,在iOS開(kāi)發(fā)過(guò)程中我們不需要編寫(xiě)所有的代碼。例如你不需要知道如何在屏幕中繪制警告框。你可以用iOS SDK框架中提供的工具類來(lái)完成這些活。iOS SDK包含了許多框架和開(kāi)發(fā)套件,讓你的開(kāi)發(fā)更加簡(jiǎn)單。例如,UIKit框架提供了構(gòu)件和管理app用戶界面的類。
這里我們依靠UIAlertController創(chuàng)建了Hello World 消息。UIAlertController對(duì)象為用戶顯示一條警告信息。代碼的第一行創(chuàng)建一個(gè)UIAlertController對(duì)象。依據(jù)一個(gè)類創(chuàng)建一個(gè)對(duì)象和調(diào)用方法非常類似。你只需指明類名,并且提供一系列屬性初始值。這里我們說(shuō)明了警告框的title,message和style
在創(chuàng)建UIAlertController對(duì)象之后,我們調(diào)用addAction方法在警告框中增加了一個(gè)“OK”按鈕。在Swift中,你可以通過(guò)點(diǎn).語(yǔ)法調(diào)用方法。
你可能會(huì)想,如何才能知道類中有哪些方法并且如何使用?在Xcode中,你可以按下Option鍵,移動(dòng)鼠標(biāo)到類名處(例如UIAlertController)并且點(diǎn)擊。將會(huì)出現(xiàn)一個(gè)關(guān)于類描述的彈出窗口。如果你想獲得更多信息你可以點(diǎn)擊藍(lán)色的鏈接。
當(dāng)UIAlertController對(duì)象的所有參數(shù)設(shè)置完畢,最后一行代碼是在屏幕上顯示這條警告信息。
在Swift中,使用self屬性引用當(dāng)前實(shí)例或者對(duì)象。為了顯示警告框,我們通過(guò)View controller用彈出卡片形式展示alertController。
專題目錄:
第二章:使用Storyboard設(shè)計(jì)用戶界面(一)