第三章 Hello World App 淺述(一)

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辜羊。


專題目錄:

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

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

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

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

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

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

第三章 Hello World App 淺述(二)

第四章 自動布局(一)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市词顾,隨后出現(xiàn)的幾起案子八秃,更是在濱河造成了極大的恐慌,老刑警劉巖肉盹,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昔驱,死亡現(xiàn)場離奇詭異,居然都是意外死亡上忍,警方通過查閱死者的電腦和手機(jī)骤肛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窍蓝,“玉大人腋颠,你說我怎么就攤上這事∠朋希” “怎么了淑玫?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長面睛。 經(jīng)常有香客問我絮蒿,道長,這世上最難降的妖魔是什么叁鉴? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任土涝,我火速辦了婚禮,結(jié)果婚禮上幌墓,老公的妹妹穿的比我還像新娘但壮。我一直安慰自己,他們只是感情好克锣,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布茵肃。 她就那樣靜靜地躺著,像睡著了一般袭祟。 火紅的嫁衣襯著肌膚如雪验残。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天巾乳,我揣著相機(jī)與錄音您没,去河邊找鬼鸟召。 笑死,一個胖子當(dāng)著我的面吹牛氨鹏,可吹牛的內(nèi)容都是我干的欧募。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仆抵,長吁一口氣:“原來是場噩夢啊……” “哼跟继!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起镣丑,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤舔糖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后莺匠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體金吗,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年趣竣,在試婚紗的時候發(fā)現(xiàn)自己被綠了摇庙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡遥缕,死狀恐怖卫袒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情通砍,我是刑警寧澤玛臂,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站封孙,受9級特大地震影響迹冤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虎忌,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一泡徙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膜蠢,春花似錦堪藐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杉辙,卻和暖如春模捂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工狂男, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留综看,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓岖食,卻偏偏與公主長得像红碑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泡垃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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

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