第三章 Hello World App 淺述(一)

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。


專題目錄:

IOS 8 開(kāi)發(fā)入門--序言(一)

IOS 8 開(kāi)發(fā)入門--序言(二)

第一章:創(chuàng)建你的第一個(gè)App(一)

第一章:創(chuàng)建你的第一個(gè)App(二)

第二章:使用Storyboard設(shè)計(jì)用戶界面(一)

第二章:使用Storyboard設(shè)計(jì)用戶界面(二)

第三章 Hello World App 淺述(二)

第四章 自動(dòng)布局(一)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,560評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,035評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,814評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,224評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,444評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,804評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,998評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,237評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,665評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,927評(píng)論 1 287
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,706評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,993評(píng)論 2 374

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,153評(píng)論 4 61
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,662評(píng)論 25 708
  • 1、async & defer 區(qū)別async異步加載腳本,加載完立馬執(zhí)行defer異步加載腳本,并在DOMCon...
    風(fēng)之化身呀閱讀 2,304評(píng)論 0 1
  • 今天終于下定決心買棉花糖機(jī)了,和老公在網(wǎng)上挑了一個(gè)最貴的。準(zhǔn)備以后在夜市賣棉花糖,走上創(chuàng)業(yè)之路。創(chuàng)業(yè)之路固然難走,...
    雪鷗閱讀 150評(píng)論 2 2
  • 這個(gè)是WKWebView 與JS的交互。 仿照作者寫(xiě)的uiwebview : http://blog.csdn.n...
    aofeilin閱讀 514評(píng)論 0 0