讓不懂編程的人愛(ài)上iPhone開(kāi)發(fā)(2017秋iOS11+Swift4+Xcode9版)

姓名:唐來(lái)賓? 學(xué)號(hào):17101223417

轉(zhuǎn)載http://mp.weixin.qq.com/s/xPah_jmJQ0dSg7gCtsnucA

【嵌牛導(dǎo)讀】一個(gè)應(yīng)用通常是由對(duì)象組成的,而這些對(duì)象之間可以相互發(fā)送消息。在我們的這款應(yīng)用中,很多對(duì)象是由iOS提供的,比如按鈕(一個(gè)UIButton對(duì)象),還有彈出對(duì)話框(UIAlertController)。當(dāng)然,部分對(duì)象需要我們自己來(lái)實(shí)現(xiàn),比如視圖控制器。

【嵌牛鼻子】應(yīng)用程序,信息傳遞

【嵌牛提問(wèn)】如何學(xué)好iOS開(kāi)發(fā)?

【嵌牛正文】一個(gè)應(yīng)用通常是由對(duì)象組成的,而這些對(duì)象之間可以相互發(fā)送消息。在我們的這款應(yīng)用中,很多對(duì)象是由iOS提供的,比如按鈕(一個(gè)UIButton對(duì)象),還有彈出對(duì)話框(UIAlertController)。當(dāng)然,部分對(duì)象需要我們自己來(lái)實(shí)現(xiàn),比如視圖控制器。

這些對(duì)象之間通過(guò)發(fā)送消息來(lái)相互交流。比如在我們這款應(yīng)用中,當(dāng)玩家觸碰應(yīng)用中的按鈕時(shí),UIButton對(duì)象會(huì)向視圖控制器發(fā)送消息,而視圖控制器則可能向更多的其它對(duì)象發(fā)送消息。

在iOS中,應(yīng)用是事件驅(qū)動(dòng)的。也就是說(shuō)這些對(duì)象會(huì)等待某些特定的事件發(fā)生,然后進(jìn)行處理?;蛟S你會(huì)覺(jué)得很奇怪,一個(gè)應(yīng)用大多數(shù)的時(shí)間都在。。。無(wú)所事事。它只是端上一杯茶,坐在那里等待事情的發(fā)生。當(dāng)玩家觸碰屏幕的時(shí)候,應(yīng)用會(huì)花上幾個(gè)微妙的時(shí)間來(lái)處理這個(gè)事情。然后呢?然后當(dāng)然是接著休息,直到下一個(gè)事件的到來(lái)。

而你作為一個(gè)程序猿扮演的角色是什么呢?是編寫(xiě)一些代碼,當(dāng)你的對(duì)象接收到事件發(fā)生的消息后對(duì)它們進(jìn)行處理。

在我們這款應(yīng)用中,按鈕的Touch Up Inside事件和視圖控制器的showAlert動(dòng)作關(guān)聯(lián)在一起。當(dāng)按鈕發(fā)現(xiàn)自己正在被觸碰的時(shí)候,就會(huì)向視圖控制器發(fā)送showAlert消息。

而在showAlert中,視圖控制器向UIAlertController對(duì)象發(fā)送另一條消息addAction。二為了顯示彈出警告提示框,試圖控制將發(fā)送消息presentViewController。

你的整個(gè)應(yīng)用都是由使用類似方式來(lái)相互交流的對(duì)象組成的。

當(dāng)然,你可能之前在自己的網(wǎng)站開(kāi)發(fā)中使用過(guò)PHP或者Ruby腳本。上面的這種事件驅(qū)動(dòng)模型和PHP腳本的工作方式是不一樣的。PHP代碼會(huì)從頭到尾順次執(zhí)行,直到抵達(dá)代碼的尾部,然后退出。

而應(yīng)用則不同,除非玩家強(qiáng)制關(guān)閉(或者自己崩潰了),它是不會(huì)主動(dòng)退出的。一個(gè)應(yīng)用會(huì)將自己的大部分寶貴時(shí)間消磨在靜靜的等待上,它們會(huì)等待輸入事件的發(fā)生,然后如獲至寶的去處理這些事件,完成后重新回家休息。

在移動(dòng)設(shè)備上,玩家的輸入通常是觸摸事件,這一類事件是應(yīng)用最重要的事件源,但除此之外還有其它類型的事件。比如操作系統(tǒng)會(huì)通知應(yīng)用有來(lái)電,或者界面要重新繪制,或者計(jì)時(shí)器在不斷的倒計(jì)時(shí),等等。

不管是哪種類型的事件,你需要記住一點(diǎn),應(yīng)用所做的每一件事都是由某種事件來(lái)驅(qū)動(dòng)的。

繼續(xù)處理我們的to-do list清單

理論知識(shí)過(guò)后,又到了繼續(xù)完成to-do list清單的時(shí)候了。

在之前的學(xué)習(xí)中,我們已經(jīng)成功的把一個(gè)按鈕放置在界面中,同時(shí)讓它可以在玩家觸碰的時(shí)候彈出一個(gè)提示對(duì)話框。接下來(lái)我們需要繼續(xù)處理清單中的其它事項(xiàng)。

雖然說(shuō)是一個(gè)清單,其實(shí)我們沒(méi)有必要按照特定的順序依次執(zhí)行,除非某一個(gè)事項(xiàng)必須在另一個(gè)事項(xiàng)已完成的情況下才能進(jìn)行。比如當(dāng)我們還沒(méi)有滑動(dòng)條的時(shí)候就不可能讀取滑動(dòng)條上的數(shù)值。

好了,現(xiàn)在讓我們?cè)诮缑嫔咸砑右恍┢渌目丶?滑動(dòng)條和文本標(biāo)簽,把這個(gè)應(yīng)用升級(jí)為一款真正的游戲!

當(dāng)我們完成這些任務(wù)后,游戲的界面會(huì)是這樣的:

不過(guò),似乎有點(diǎn)不對(duì)勁?這個(gè)界面和最開(kāi)始給你展示的界面看上去不太一樣。

這是因?yàn)檫@里所使用的都是標(biāo)準(zhǔn)UIKit控件。

對(duì)于常規(guī)的應(yīng)用來(lái)說(shuō),這種界面差不多也就可以了。不過(guò)考慮到對(duì)一款游戲來(lái)說(shuō)這樣的界面實(shí)在是有點(diǎn)無(wú)法忍受,我們會(huì)在后面的內(nèi)容里面把它變得漂亮一點(diǎn)。

UIKit和其它框架(frameworks)

iOS中提供了很多建筑程序“大廈”用的基礎(chǔ)材料,我們將其稱之為frameworks(框架),或者說(shuō)“kits(組件)”。UIKit這個(gè)框架是最基本也是最重要的一種,其中提供了用戶界面的一些控件,比如按鈕,標(biāo)簽,導(dǎo)航欄等。使用它可以管理視圖控制器,同時(shí)處理一切和應(yīng)用的用戶界面相關(guān)的事情。(UI的全稱就是User Interface)

如果你必須從零開(kāi)始給所有的東西編碼,恐怕會(huì)浪費(fèi)大量的時(shí)間。與之相反,大多數(shù)情況下我們可以在系統(tǒng)提供的框架之上來(lái)創(chuàng)建應(yīng)用,從而充分利用蘋(píng)果工程師提前為你準(zhǔn)備好的大禮。

在應(yīng)用中所有以UI為前綴的對(duì)象,比如UIButton都來(lái)自UIKit。

當(dāng)你開(kāi)發(fā)一款iOS應(yīng)用的時(shí)候,可以說(shuō)大部分的時(shí)間都在和UIKit這個(gè)框架打交道。

其它的框架也各自有各自的用途。比如Foundation框架提供了構(gòu)建APP的很多基本要素。Core Graphics框架用于在界面上繪制基本形狀,比如直線,矩陣,漸變和圖形等。AVFoundation框架用于播放聲音。當(dāng)然還有其它更多的框架。iOS的完整框架又被稱之為Cocoa Touch。

說(shuō)到Cocoa Touch,這里再多扯幾句。Cocoa Touch是在Mac的Cocoa開(kāi)發(fā)框架基礎(chǔ)上誕生的,同時(shí)也為移動(dòng)設(shè)備的特點(diǎn)做了優(yōu)化。為了了解Cocoa Touch,我們不妨看看它在Mac上的前身-Cocoa。Cocoa是Mac OS X上著名的五大API之一,其它四個(gè)分別是Carbon,POSIX,X11HE JAVA。Cocoa起源于1989年喬布斯在NEXT公司搞的NeXTSTEP1.0,當(dāng)時(shí)沒(méi)有Foundation框架,只有動(dòng)態(tài)運(yùn)行庫(kù),也即Kit,最重要的就是AppKit了。后來(lái)NeXT硬件賣(mài)的很糟糕,幫主就把NeXTSTEP3.1移植到了Intel和HP平臺(tái),同時(shí)加入了Foundation框架。1996年蘋(píng)果收購(gòu)了NEXT,幫主從此開(kāi)始了王者歸來(lái)的14年登神之路。

這里放一張喬幫主當(dāng)年在NEXT時(shí)的NB照片,雖在1985年被驅(qū)逐出蘋(píng)果但生就一副高富帥的樣子。正如周星星所言,“你以為躲起來(lái)就找不到你了嗎?沒(méi)有用的!象你這樣拉風(fēng)的男人,無(wú)論在什么地方,都像漆黑中的螢火蟲(chóng)一樣,那樣的鮮明,那樣的出眾。。。”

蘋(píng)果收購(gòu)NEXT后,Cocoa在Mac 系統(tǒng)上開(kāi)始獨(dú)放異彩。在2014年WWDC蘋(píng)果發(fā)布Swift之前,我們都會(huì)用Xcode(前身是Project Builder)和Interface Builder上用Objective-C開(kāi)發(fā)Cocoa應(yīng)用程序。

Cocoa的設(shè)計(jì)滿足最嚴(yán)格的MVC(Model模型-View視圖-Controller控制器)原則。所以在斯坦福大學(xué)iOS開(kāi)發(fā)教程中會(huì)花上一節(jié)課的時(shí)間專門(mén)講解MVC的概念。這里先不具體說(shuō)MVC,后面再詳細(xì)介紹,免得把你給撐著了。

在面向桌面級(jí)應(yīng)用的Cocoa架構(gòu)中,使用AppKit來(lái)提供圖形用戶界面交互所需要的基本控件。它基于Foundation框架,使用NS前綴。

當(dāng)2008年蘋(píng)果向第三方開(kāi)發(fā)者開(kāi)放iOS SDK時(shí),使用UIKit替代AppKit,作為iOS設(shè)備的圖形用戶界面工具包,使用UI前綴。

好了,上面這些知識(shí)先大概了解下,感興趣的童鞋可以自己去探索更深入的內(nèi)容。

切換設(shè)備顯示模式(豎屏VS橫屏)

什么是橫屏,什么是豎屏?寬度比高度要大,就是橫屏,反之就是豎屏。

這里不多廢話,看看下面這兩個(gè)圖就一目了然了。

豎屏是這樣滴:

橫屏是這樣滴:

在豎屏顯示模式下,iPhone SE的界面在垂直方向上有586個(gè)點(diǎn)。橫屏方向則正好顛倒過(guò)來(lái)。

那么什么是point(點(diǎn))?

對(duì)于iPhone 3GS和之前的老設(shè)備,包括對(duì)應(yīng)的Ipod touch設(shè)備,還有iPad1,2,ipad mini,一個(gè)點(diǎn)就對(duì)應(yīng)一個(gè)像素。這樣說(shuō)很明白吧。

那么什么是pixel(像素)?簡(jiǎn)單點(diǎn)說(shuō),它是任何一個(gè)屏幕(包括電腦)的最小顯示單位。電子設(shè)備的屏幕是由像素矩陣組成的(對(duì)于高清屏幕需要在放大鏡和顯微鏡下面才看得到矩陣)。矩陣上的每一個(gè)點(diǎn)都有自己的色彩和亮度。當(dāng)我們?cè)谄聊簧巷@示圖片時(shí),可以通過(guò)更改這些像素的色彩數(shù)值來(lái)形成一副圖片。

不過(guò)對(duì)于具備Retina(視網(wǎng)膜顯示,或者說(shuō)高清顯示)設(shè)備的屏幕上來(lái)說(shuō),一個(gè)點(diǎn)對(duì)應(yīng)垂直和水平方向上的各兩個(gè)像素,或者說(shuō)總共對(duì)應(yīng)4個(gè)像素。對(duì)于老的iOS設(shè)備,或者說(shuō)“標(biāo)清”,“低清”設(shè)備,320*480點(diǎn)就對(duì)應(yīng)320*480像素。

但是對(duì)于Retina設(shè)備來(lái)說(shuō),這個(gè)數(shù)字就變成了640*960像素(iPhone5之后的設(shè)備是640*1136)像素。實(shí)際上你要顯示之前4倍的像素。

而iPhone 6 Plus和iPhone 7 Plus就更瘋狂了,它具有3x的分辨率,因此每個(gè)點(diǎn)對(duì)應(yīng)9個(gè)像素!是不是有點(diǎn)瘋狂?如果你不具備刺客一樣的鷹眼技能,那么幾乎看不出來(lái)這種Retina HD顯示上的單個(gè)像素。同時(shí)我們很難用肉眼分辨率一個(gè)像素從那里結(jié)束,臨近的像素從哪里開(kāi)始。

隨著iPhone的不斷演化,不僅僅是像素?cái)?shù)量有了明顯的不同,同時(shí)屏幕尺寸也發(fā)生了明顯的變化。從最初的3.5英寸到如今iPhone 6 Plus的5.5英寸,Cook你老人家忘了喬幫主當(dāng)年說(shuō)的話了嗎?’Who need a large screen?’

不過(guò)作為開(kāi)發(fā)者,還是接受這一事實(shí)吧。下面這個(gè)表列出了屏幕尺寸和相應(yīng)的分辨率(以point點(diǎn)為單位):

在早期開(kāi)發(fā)iOS應(yīng)用的時(shí)候,只有一個(gè)屏幕尺寸,很長(zhǎng)一段時(shí)間里面曾經(jīng)是??Android開(kāi)發(fā)的原因之一。但如今一個(gè)尺寸打天下的好日子早已一去不復(fù)返,iOS開(kāi)發(fā)者也需要開(kāi)始應(yīng)付一系列的屏幕尺寸。

iOS開(kāi)發(fā)者需要記住一點(diǎn)的是,UIKit使用的單位是point,而不是pixel(像素),因此我們只需要考慮以point為單位的不同屏幕尺寸。真實(shí)的像素大小對(duì)于UI設(shè)計(jì)師很重要,因?yàn)閳D形圖像仍然是以像素為單位的。

所以,開(kāi)發(fā)者以point為單位,設(shè)計(jì)師以pixel為單位。

point和pixel的區(qū)別是不是讓你稍微有點(diǎn)糊涂了?不過(guò)如果看到現(xiàn)在你只對(duì)這一個(gè)問(wèn)題感到迷惑,那就說(shuō)明我的努力沒(méi)有白費(fèi)~

在這篇教程中,我們首先需要使用iPhone SE的320*568 point。而在隨后的內(nèi)容中,我們會(huì)學(xué)習(xí)如何讓這款游戲適配不同大小的iPhone。

讓?xiě)?yīng)用在橫屏模式下工作

為了讓?xiě)?yīng)用從豎屏模式切換為橫屏模式,我們得完成三件事情:

1.讓Main.storyboard中的視圖使用橫屏顯示

2.更改設(shè)備的”Supported Device Orientations”設(shè)置。

在Xcode的Interface Builder中打開(kāi)Main.storyboard,在View as: iPhone SE面板中,將Orientation 更改為landscape:

接下來(lái)將按鈕移動(dòng)回視圖的中央位置,

現(xiàn)在我們來(lái)點(diǎn)擊Run按鈕,就可以看到下面的情況。

顯然這不是我們想看到的結(jié)果,不但屏幕不是橫屏顯示,而且按鈕也不是處在中央位置。

不過(guò),如果我們手動(dòng)把Simulator旋轉(zhuǎn)到Landscape,那么一切會(huì)看起來(lái)正常。

方法很簡(jiǎn)單,從iOS Simulator的菜單欄上選擇Hardware-Rotate Left或是Rotate Right,也可以按住command鍵,然后按左右箭頭切換模擬器朝向。

注意到在橫屏顯示狀態(tài)下界面不會(huì)顯示iPhone的狀態(tài)欄(電池電量,通訊信號(hào),時(shí)間。。。),這樣可以讓?xiě)?yīng)用充分利用空間。

看起來(lái)我們還需要做一件事,而不是用上面的方式來(lái)手動(dòng)調(diào)節(jié)。實(shí)際上有一個(gè)配置選項(xiàng)讓iOS知道應(yīng)用的顯示方向。一般情況下,從模板新建的應(yīng)用同時(shí)支持Portrait和Landscape布局。

在Xcode中點(diǎn)擊Project Navigator(項(xiàng)目導(dǎo)航)頂部的BullsEye項(xiàng)目圖標(biāo),此時(shí)Xcode窗口的主面板會(huì)顯示關(guān)于項(xiàng)目的一些設(shè)置。確保選中右側(cè)的General選項(xiàng)卡。

在Deployment Info下面有一個(gè) Device Orientations。上面默認(rèn)選中了三個(gè),我們要取消選中Portrait這個(gè)選項(xiàng)。

現(xiàn)在再點(diǎn)Run按鈕,一切應(yīng)該正常了。

注意:因?yàn)榇饲皩?duì)模擬器的設(shè)備進(jìn)行過(guò)旋轉(zhuǎn)操作,所以如果這個(gè)時(shí)候模擬器屬于垂直狀態(tài),需要手動(dòng)將其旋轉(zhuǎn)到水平狀態(tài)。這樣后面就完全正常了。

好了,忙了半天,再來(lái)點(diǎn)福利吧。

One more thing… 關(guān)于對(duì)象,消息和方法

我們這個(gè)教程的目的就是,不求最快,但求最好。這不,你才寫(xiě)了一段代碼,現(xiàn)在又該進(jìn)入理論知識(shí)充電時(shí)間了。

接下來(lái)講點(diǎn)編程的理論知識(shí),希望你別犯困,待會(huì)兒有福利的。

Swift屬于所謂的“面向?qū)ο蟆暗木幊陶Z(yǔ)言,也就是說(shuō)你要做的大多數(shù)事情都和某種類型的對(duì)象有關(guān)。之前我也提到過(guò),一個(gè)應(yīng)用就是由彼此可以發(fā)送消息的對(duì)象組成的。

當(dāng)你開(kāi)發(fā)一款iOS應(yīng)用的時(shí)候,通常會(huì)用到系統(tǒng)提供給你的一些對(duì)象。比如UIKit框架里面的UIButton對(duì)象。同時(shí)你也會(huì)制造屬于自己的對(duì)象,比如視圖控制器。

那么對(duì)象(object)究竟是個(gè)什么東西?如果把你要開(kāi)發(fā)的產(chǎn)品比作一座大廈,那么對(duì)象就是修建這座大廈的磚塊。程序猿們喜歡把有一定關(guān)聯(lián)的功能放到對(duì)象里面去。這個(gè)對(duì)象可以解析一個(gè)RSS feed,那個(gè)對(duì)象可以在屏幕上繪制一個(gè)圖像,還有個(gè)對(duì)象可以執(zhí)行復(fù)雜的計(jì)算。每個(gè)對(duì)象都負(fù)責(zé)程序中的某個(gè)特定部分。在一個(gè)完整的應(yīng)用中存在著多種不同的對(duì)象(幾十上百,甚至成千上萬(wàn)?)

即便是我們這款小小的應(yīng)用,也包含了幾個(gè)不同的對(duì)象。最經(jīng)常用到的當(dāng)然是ViewController這個(gè)視圖控制器。

除此之外,按鈕也是一個(gè)對(duì)象,當(dāng)然還有提示對(duì)話框。

我們的項(xiàng)目有一個(gè)名為AppDelegate的對(duì)象,當(dāng)然這里不多說(shuō)它的作用。不過(guò)你會(huì)發(fā)現(xiàn)基本上每個(gè)iOS應(yīng)用里面都有一個(gè)xxxAppDelegate的東西在里面。我們?cè)谔崾緦?duì)話框里面所放的內(nèi)容也是對(duì)象。在iOS應(yīng)用里,對(duì)象無(wú)處不在!

一個(gè)對(duì)象既有數(shù)據(jù)(data),也有功能(functionality)。

比如按鈕。當(dāng)我們把按鈕拖曳到storyboard上去的時(shí)候,實(shí)際上它就成了視圖控制器的一種數(shù)據(jù)(data)。數(shù)據(jù)總是包含著一些東西。比如在這里,視圖控制器就包含著按鈕。

至于功能,也就是執(zhí)行一些具體的操作。比如我們所添加的showAlert動(dòng)作,它就是一個(gè)功能。

按鈕本身也有自己的數(shù)據(jù)和功能。比如按鈕上的標(biāo)簽文本內(nèi)容和顏色,它在屏幕上的位置,寬度和高度,等等,都是它的數(shù)據(jù)。按鈕的功能則是:它能發(fā)現(xiàn)玩家觸碰到它,然后會(huì)觸發(fā)一個(gè)動(dòng)作作為響應(yīng)。

在iOS開(kāi)發(fā)中,一個(gè)對(duì)象的功能通常被稱為method(方法)。其它的編程語(yǔ)言可能會(huì)換個(gè)叫法,比如“函數(shù)”,“過(guò)程”,“子程序”神馬的,不過(guò)在Swift里面用的術(shù)語(yǔ)是方法。方法就是屬于某個(gè)對(duì)象的功能。

我們的showAlert動(dòng)作就是一個(gè)方法(終于可以給它正名了,動(dòng)作還是多少有點(diǎn)別扭~)在Swift中識(shí)別方法很簡(jiǎn)單,代碼前面使用func(function的縮寫(xiě)),而名字后面是大括號(hào)。

如果你仔細(xì)看ViewController.swift中的代碼,可以看到幾個(gè)其它的方法,比如viewDidLoad()和didReceiveMemoryWarning()。

以上這些方法目前并沒(méi)有做什么實(shí)際工作(占位?)Xcode模板只是為了方便開(kāi)發(fā)者所以才會(huì)在創(chuàng)建項(xiàng)目時(shí)自動(dòng)幫你生成。這些特殊的方法是由視圖控制器使用的,所以我們后面肯定會(huì)告訴你究竟它們是干嗎用的。別著急,慢慢來(lái)。

方法的概念

當(dāng)然,對(duì)于一個(gè)從來(lái)沒(méi)寫(xiě)過(guò)代碼的非程序猿來(lái)說(shuō),方法的概念肯定有點(diǎn)怪異。下面給了一個(gè)例子:

你(或者一個(gè)叫“你”的對(duì)象)想在周末開(kāi)個(gè)party聚會(huì)。但忘了提前準(zhǔn)備冰激凌。幸好你認(rèn)識(shí)一個(gè)叫Steve的對(duì)象(你放心,他不可能是我們偉大的幫主),幸好他家附近有個(gè)便利店。如果派對(duì)上沒(méi)有冰激凌肯定讓人感覺(jué)不爽,所以在你準(zhǔn)備派對(duì)的過(guò)程中你給Steve發(fā)了個(gè)消息,讓他去買(mǎi)點(diǎn)冰激凌。

這個(gè)時(shí)候系統(tǒng)會(huì)切換到叫Steve的對(duì)象,然后執(zhí)行他的buyIceCream()方法,從頭到尾依次執(zhí)行。一旦他的方法完成,系統(tǒng)會(huì)返回你的throwParty()方法,繼續(xù)其它的事情,這樣你和你的朋友就可以飽餐Steve帶來(lái)的冰激凌了。

Steve這個(gè)對(duì)象也有自己的數(shù)據(jù)。在他去買(mǎi)冰激凌之前,他知道自己是有錢(qián)人。在商店里他和售貨員交換了錢(qián)的數(shù)據(jù),當(dāng)然更重要的是,用錢(qián)的數(shù)據(jù)的減少換來(lái)了冰激凌數(shù)據(jù)的增加。做好這筆交易之后,他帶著冰激凌返回派對(duì)(前提是沒(méi)有半路偷吃光)。

“發(fā)送消息”實(shí)際上比字面上的意思更復(fù)雜。我們可以用它來(lái)幫忙理解對(duì)象之間是如何交流的,但別指望真有信鴿或者快遞員參與到這個(gè)過(guò)程中。系統(tǒng)只是簡(jiǎn)單的從throwParty()方法跳轉(zhuǎn)到buyIceCream()方法,然后再跳轉(zhuǎn)回來(lái)。

通常來(lái)說(shuō),“調(diào)用方法”和“觸發(fā)方法”都是一回事:系統(tǒng)會(huì)跳轉(zhuǎn)到你要調(diào)用的方法,然后在執(zhí)行完畢其中的代碼后返回到之前的方法。

一個(gè)很重要的事情是,對(duì)象都有自己的方法和數(shù)據(jù)。對(duì)象可以查看其它對(duì)象的數(shù)據(jù)(當(dāng)然Steve也可能拒絕你查看他的卡上余額),以及讓其它對(duì)象執(zhí)行它們的方法。這些事情放在一起,就組成了一個(gè)完整的應(yīng)用。

好了,第三天的內(nèi)容到此結(jié)束。別太貪心,明天再來(lái)。

one last thing...

我看到有朋友說(shuō)自己已經(jīng)28歲了,現(xiàn)在開(kāi)始學(xué)iOS開(kāi)發(fā)是否來(lái)得及,我個(gè)人對(duì)此的回答是:不晚!但是需要提醒的是,iOS開(kāi)發(fā)和搞學(xué)術(shù)研究不同,其實(shí)很多時(shí)候努力和意志力比天賦更重要。在作出選擇之前要慎重考慮各種因素,但一旦決定就要一往直前,絕不能輕言放棄!

最后放上WWDC 2017上Tim Cook和10歲少年Alex Knoll的合影:

還有同樣在WWDC 2017上受到世人關(guān)注的82歲的老太太Masako Wakamiya。

Everyone can code!

Never too old to code!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容