讓不懂編程的人愛上iPhone開發(2017iOS11+Swift4+Xcode9版)-第1篇

簡介:javascript

人天生就喜歡遊戲,因此咱們要開發的第一款應用不會是蒼白無力的」Hello World」,而是一個小遊戲,名爲Bull’s Eye(拖拖看)。雖然這個遊戲很是簡單,但若是你從未接觸過編程,可能仍是會遇到一些困難。可是不要擔憂,即使你第一遍接觸這些新概念的時候還有些含糊不清,但咱們會在整個系列的教程中不斷重複,直到它們成功的進入你的潛意識,甚至在夢中都不會忘記~前端

須要提醒你們的是,學習一門語言或工具的最好方式是練習和實踐。所以,對於初學者來講,千萬不要只是看過一遍了事,而應該本身手動敲入全部的代碼,甚至故意修改其中的代碼,刻意製造一些bug,而後想辦法解決。而在學完本教程以後,要當即開始實戰,同時多看蘋果官方的示例代碼和Github裏的示例。不要懼怕麻煩和錯誤,在解決麻煩和修正錯誤的過程當中,你能更深刻的領會爲什麼要這樣作,而不只僅是簡單的copy和paste。java

在學習的過程當中,會要求你本身作一些思考和練習,而不是徹底被動的接受。僅僅知道前面有這樣一條路和本身親自走過這條路是徹底不一樣的感受。學習編程惟一有效的途徑就是在思考的同時要本身寫代碼。ios

前面說了,本系列教程是針對徹底的菜鳥來設計的。也就是說,哪怕你是個徹底不懂編程的文科生,咱們也有信心讓你愛上iPhone開發。固然,若是你懂一點編程知識,學習起來會快不少。程序員

因本人時間精力有限,沒法跟你們一對一解決相關的技術問題,請你們在QQ交流羣594353854 中互幫互助。羣裏已經幾百人了 你們遇到啥問題都會在裏面交流!並且免費分享零基礎入門資料 iOS開發資料一整套!是個很是好的學習交流地方!也有程序員大神給你們熱心解答各類問題!很快滿員了。欲進從速哦!各類PDF等你來下載!所有都是免費的哦!只爲幫助你們快速入門,因此小編在羣裏等大家過來一塊兒交流學習呢!
web


做者:一隻作iOS開發的程序員
連接:https://juejin.im/post/5a46349e5188251fbd33f2c8
來源:掘金
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。


處女座或強迫症患者必讀:數據庫

若是你在第一遍開教程的時候有些東西不能百分百理解,最好的方式不是當即鑽牛角尖死磕到底,畢竟你沒有打過很好的編程底子,這樣作會讓你很快喪失信心,甚至很快放棄。碰到這類狀況,哥建議你先把問題放在那兒(或者記下來),而後繼續看下去。等到整個教程看完了,回過頭再看你以前遇到的問題,若是仍是不能理解,那麼再看一遍。(其實90%的可能性是,等你回頭再看當時以爲比相對論和量子力學還難理解的問題,如今就是小學加減法的水平)。由於在整個教程的學習過程當中,咱們會對一些重要的概念不斷重複,直到你以爲跟吃飯走路同樣天然。編程

若是說Objective-C曾經是學習iOS開發的最大障礙,那麼這最後一點點擔心也不須要了,由於在2014年的WWDC上蘋果發佈了一個新的編程語言-Swift。 它可讓開發者在很短的時間裏面輕鬆上手,如同javascript同樣,與此同時它的性能又不會比Objective-C差多少,起碼是在Java之上。windows

對當前的主流開發語言難度排個序,大體以下(從最難到最簡單,比較主觀~):xcode

機器語言 >彙編> C++ >Objective-C > C, Lisp,Prolog>C# > Java > Python,PHP, Swift, Javascript, Ruby

正如剛纔所提到的,對於彙編如下難度的語言,只要真正學懂一門, 再學其它的編程語言會輕鬆不少。畢竟在現實的世界裏,真正的程序猿和攻城師不多隻會一門開發語言的。只懂一門開發語言能活到如今的要嗎是某個方面的頂級專家,要嗎就是走了技術轉管理的路線。


在咱們的教程中,不會也不可能教你學習全部和iPhone,iPad開發的知識。iOS SDK(開發工具包)很是龐大,除了蘋果的官方技術文檔,市面上沒有任何一個教材能夠涵蓋iOS開發的所有內容。咱們只會教你瞭解Swift和iOS開發所需具有的核心基礎。一旦你掌握了建築技術,能夠本身去探索iOS開發的其它細節。


除了Swift語言和iOS開發工具包的相關知識,咱們最重要的目的是讓你學會程序猿的思惟方式。一旦你具有了這種思惟方式,能夠完成任何編程任務,無論是遊戲,工具,網絡應用仍是其它你能想到的東西。做爲一個程序猿,須要思考解決各類計算問題,並創造性的想出解決方案。一旦掌握瞭解決問題的方法,不論多複雜的問題均可以解決。這纔是本系列教程的終極目的,讓不懂編程的人愛上開發!

能夠百分百保證的是,你在學習的過程當中必定會遇到各類問題。程序代碼中會出現無數莫名其妙的bug,讓你不知所措。但即使是一個擁有30年以上編程經驗的程序猿,也會常常遇到這樣的問題。咱們只是人類,而人類的大腦在處理複雜計算問題的時候總會出錯的。不要懼怕出錯,但咱們會提供一些思惟工具,教會你如何填平本身挖的坑。

在我身邊有不少人學習iPhone開發的方式是:

從大量的博客和網站中拷貝粘貼代碼,而徹底不理解這些代碼的工做原理,以及該如何將這些代碼嵌入到本身的項目之中。從網絡中尋找解決方案是一種高效的工做方式,但你必須真正的理解這些代碼的做用,才能觸類旁通。

在本系列教程中 ,咱們從一開始就會學習如何構建真正的應用,而不是所謂的baby應用,或是僅僅爲了學習目的而設計的簡單示例。咱們會詳細解釋其中的每一步操做,並附上豐富的圖片幫助你們來理解。

經過這些步驟,你將在製做這些有趣應用的同時逐漸掌握編程的思惟和技能。當你最終學完本系列教程後,應該已經掌握了Swift和iOS開發工具包的精髓。更重要的是,你應該學會了如何用程序猿的思惟方式來編程和解決問題,並真正開始製做屬於本身的應用。對此,我有百分之一千的信心!

固然,最最重要的是,但願你們在看完教程後,可以愛上iPhone開發,愛上用編程語言來創造世界的樂趣~

那還等什麼,讓咱們就此開始吧!


iOS7, iOS8,iOS9, iOS10,iOS11…


時光飛逝,世事無常。自2007年1月Macworld上喬幫主那一次驚天地泣鬼神的演講至今,居然已經10年了!

10年過去了,喬幫主的音容笑貌彷彿還在眼前,只是,人面不知何處去,桃花依舊笑春風。

很感激Cook,在iPhone X的發佈會上,他仍然把Steve Jobs的一段話放到了開頭。

10年前,Nokia藐視羣雄,Motorola和三星爭鬥不休,衆多國產品牌手機和山寨手機還在華強北幸福的收割着打工者腰包裏很少的毛爺爺。

10年後,Nokia虧損連連,被Elop的木馬計成功收入微軟旗下,繼而又宣佈放棄了這塊業務。

Motorola早就被Google收入賬下,當年的手機三雄只剩下三星還在行業裏興風做浪。

早期混得風生水起的HTC也在最近將手機設計業務部門出售給了Google。

反觀天朝,小米、魅族、華爲一片混戰,而採用農村包圍城市戰略的Vivo和Oppo手機則成功登頂國內市場。

不過回顧歷史會發現,當天朝的土豪們佔據市場主動的時候,就意味着一個行業發展到了高峯期,即將開始走下坡路了。好比從前的PC,好比再以前的家電,莫不如是。

蘋果帝國好不容易佔據半壁江山,卻不幸遭遇王者的離去,在Tim Cook接手蘋果以後,遲遲沒有給你們提供足夠的驚喜。

熟悉蘋果的童鞋都知道,喬幫主老是會將一些重要的產品放在One more thing…上。

然而在Cook時代,除了數年前iPhone6發佈會上的Apple Watch上用過這個標誌性的驚喜宣言, One more thing…居然從蘋果發佈會中消失了,直到今年。

除了硬件以外,蘋果今年在技術創新了也着實拿出了新的東西。在2017年6月的WWDC上,蘋果推出了針對虛擬現實開發的ARKit,以及針對深度學習和人工智能的Core ML。能夠說,這兩個SDK的發佈,再配合iPhone X的諸多創新,確實頗有可能引領將來十年的智能手機。


總之,若是對蘋果開發感興趣,那麼入手一臺iPhone X幾乎是必然的選擇。若是哪位朋友能確保買到,別忘了幫我一把~


仍是談談iOS11吧。

其實上面要說的是,移動互聯網行業的發展速度太快了,iPhone操做系統到如今已經到了iOS11。本系列教程將徹底基於iOS11,並採用全新的編程語言Swift4。

既然是學習一門全新的工具,天然要從最新的版本學起,所以,iOS11+Swift4+Xcode9是咱們的第一選擇。


有舍纔有得


學習iPhone開發不但能夠做爲一門興趣愛好,一樣還能夠帶來不錯的收益(若是你能給用戶帶來不錯的產品,或者找到一份提供給力薪水的工做~)。但天下沒有白吃的午飯,進行iOS開發也是要花錢的。如下是你須要投資的:

1.一臺iOS設備:

iPhone,iPad,iPad Pro,iPad mini或iPad Touch中的任一種。只用虛擬機永遠無法學會真正的開發。固然,爲了支持最新的iOS系統,就不要買太老型號的設備了,好比iPhone4之類的。

由於本系列教程將使用iOS11,因此你們也要了解下支持iOS11的設備:

iPhone:

iPhone 7

iPhone 7 Plus

iPhone 6s

iPhone 6s Plus

iPhone 6

iPhone 6 Plus

iPhone SE

iPhone 5s

iPad:

12.9-inch iPad Pro (2nd generation)

12.9-inch iPad Pro (1st generation)

iPad Pro (10.5-inch)

iPad Pro (9.7-inch)

iPad Air 2

iPad Air

iPad (5th generation)

iPad mini 4

iPad mini 3

iPad mini 2

固然,若是你但願在本身的應用中提供虛擬現實(ARKit)或人工智能(Core ML)相關的特性,那麼就必須使用支持A九、A10或A11芯片的設備,具體來講是這些:

• iPhone 6s /6s Plus
• iPhone 7 / 7 Plus
• iPhone SE
• iPhone 8/ 8 Plus
• iPhone X
• iPad Pro
• iPad (2017)

我的建議直接購買能夠支持ARKit的設備。

2.一臺使用Intel內核處理器的Mac電腦:

須要安裝最新的macOS High Sierra。建議電腦的內存在4G以上,不然你會很痛苦的。。。

有人說能夠用虛擬機在PC上開發,個人建議是,寧肯買一臺二手的MAC,也不要用PC開發。不然,你會遇到各類莫名其妙的問題,並且對提升你的編程思惟沒有任何幫助。

對通常的入門開發者來講,若是不是同時還身兼設計師的重任,那麼一臺13寸的Macbook Air或Macbook Pro就能夠知足要求了。

3.一個付費的iOS開發者帳號

有了開發者帳號,最簡單的裝B方式就是當蘋果發佈了新的beta版系統時(特別是大版本的更新,好比從iOS9到iOS10),你能夠第一時間在本身的iOS設備或者電腦上體驗。

固然,最重要的是能夠將本身開發的產品放到蘋果AppStore裏面銷售,賺取真金白銀,當上CEO贏取白富美今後走上人生巔峯。

如何申請付費的iOS開發者帳號

狠簡單,直接到這裏就能夠了:

developer.apple.com/programs/io…

整個過程其實很簡單,不過你須要先註冊一個Apple ID,由於你的開發者帳號會與之綁定。其實一年99美圓的費用並不高,若是你是真心想學iOS開發,建議仍是花了這筆錢。 並且蘋果如今至關厚道的一點是,只要加入一個開發者計劃,就能夠爲iOS設備,Apple Watch, Mac,Apple TV等蘋果全系列硬件產品開發應用。而在此前iOS開發和Mac開發是兩個徹底不一樣的開發者計劃,每一個都要單獨收費的哦~

固然,若是朋友們實在是吃了上頓沒下頓,或者說只是想觀望下,還不想花一毛錢。那麼你也能夠直接用本身的Apple ID來登陸,一樣能夠無償使用Xcode開發工具,也能夠在設備上進行測試。可是無法得到最新的Beta版本,更不可能將產品發佈到App Store裏面。


強大的Xcode


Xcode是開發iPhone應用的主要工具。Xcode帶有一個文本編輯器,可讓你敲入本身的代碼,同時還有一個可視化的工具由來設計應用的用戶界面。Xcode能夠將你編寫的源代碼編譯成可執行的應用,並在模擬器(Simulator)或設備上進行測試。同時,Xcode還帶有一個debugger(調試器),用於幫助你發現代碼中的錯誤(很遺憾,目前它還無法自動幫你修復bug,這一天的到來還須要更給力的人工智能)

下載Xcode的方法很簡單,直接從這個連接下載:

itunes.apple.com/app/xcode/i…


固然,最一般的作法是在Mac App Store裏面搜索Xcode,而後下載安裝就行了。

再次提醒,下載Xcode,Unity和Cocos2d-x等開發工具時必定要從官網下載,且只使用最慢的http下載連接下載,或使用官方的下載工具(好比Unity),不要使用任何第三方下載工具(好比迅雷之類的)。

若是你的操做系統不是macOS High Sierra,那麼請先升級操做系統。

本系列教程用的Xcode版本是最新的Xcode 9.0(9A235),而iOS版本是10.3。

不少老的iOS教程還在用Xcode和iOS以前的版本,因此當你閱讀那些教程的時候,請注意開發工具的細節差別。


關於計算機語言

語言是一種溝通工具。不少時候咱們覺得iPhone只是一部手機,其實它的內核是一個很是先進的微型計算機,只是同時具有打電話的功能而已。和其它計算機同樣,iPhone是經過數字電路的0,1指令來工做的。若是咱們編寫軟件在iPhone上運行,就必須把源代碼翻譯成計算機能夠理解的0,1指令。

幾十年前,人們不得不使用0,1指令和計算機直接交流。而隨着彙編和高級語言的出現,大多數的編程語言變得更接近於平常生活所使用的英語。這樣一來,人們更容易理解編程語言的使用。但同時也須要將人類能夠理解的語言翻譯成計算機能夠理解的0,1指令。

舉例而言,計算機內部會使用如下的語言:(不要關注其中的細節,你如今還看不懂):

事實上,計算機真正看到的指令以下:

上面的movl和calll指令只是爲了方便人類理解。但即使如此,對我我的來講這種語言仍是使人望而生畏。

今天的編程語言是下面這樣的(先不要深刻細節,看看而已):

void HandleMidiEvent(char byte1, char byte2, char byte3, int deltaFrames)
{
char command =(byte1 & 0xf0);

if(command == MIDI_NOTE_ON && byte3 !=0)
{
     PlayNote(byte2 + transpose, velocityCurve[byte3]/ 127.0f, deltaFrames);
}
elseif((command == MIDI_NOTE_OFF)
      ||  (command == MIDI_NOTE_ON && byte3 ==0))
{
     StopNote(byte2 + transpose, velocityCurve[byte3]/ 127.0f, deltaFrames);
}
elseif(command == MIDI_CONTROL_CHANGE)
{
if(data2 ==64)
         DamperPedal(data3, deltaFrames);
elseif(data2 == 0x7e || data2 == 0x7b)
         AllNotesOff(deltaFrames);
}
}
複製代碼


看到這裏或許你纔有點感受了。即使你沒有任何編程經驗,但只要懂英語,就大概能判斷出上面代碼的意思。以上代碼是從一個音效同步工具的程序中截取的。它使用C語言編寫,這門語言是上世紀60年代開發的,人們用它開發了著名的Unix操做系統(今天全部操做系統的鼻祖,包括Windows,Mac,Linux)。固然,iOS的內核也是基於Unix系統的。

而這裏咱們要着重提一下蘋果的新編程語言Swift。Swift集成了傳統面向對象編程語言的特性,同時又具有函數式編程的一些特徵。若是你曾經學過C#,Python,Ruby或者JavaScript,那麼會發現Swift有不少類似之處,很容易上手。


在2014年WWDC以前,用來開發iOS應用的語言被稱爲Objective-C,它是標準C語言的擴展。使用Objective-C能夠完成C語言所能完成的任何工做。同時它還添加了不少有用的特性,好比最重要的面向對象編程(Objective-Oriented)。Objective-C在前些年可謂門庭冷落,無人問津,除了鐵桿的Mac粉絲,幾乎瀕臨滅絕。但隨着2007年那一次偉大的iPhone產品發佈後以後,幾乎要被歷史遺忘的Objective-C語言再次進入人們的視線,甚至成爲今的主流開發語言。Objective-C是2012和2013年的年度編程語言No.1。

目前仍然有大量的iOS項目使用Objective-C開發,畢竟一個新的編程語言普及須要幾年甚至更長的時間,不過iOS開發的將來顯然是屬於Swift的。

這裏不得不提到C++語言,事實上C++和Objective-C語言幾乎是同時出現的。和Objective-C語言的簡潔不一樣,C++語言幾乎包含了全部可能的特性。做爲一門編程語言,它很是強大,且執行效率超高。事實上,全部的操做系統,以及大量的網絡遊戲,主機遊戲和PC遊戲,遊戲引擎都會使用C++來開發。C++的問題在於,對於一個新手來講,它異常複雜,包括了基本語言結構,面向對象開發和模板、標準庫等諸多內容。學習C++仍是很有難度的,僅次於彙編語言。不過C++11(2011年的新標準)這一C++的最新版本在不少方面作了大的改進,相信會讓這門「古老」而又強大的編程語言更加褶褶生輝。

在進行iOS應用或遊戲開發的時候,咱們能夠混合使用C,C++和Objective-C(簡稱爲Objective-C++)。

此外,Facebook在2015年開源的React Native可使用Javascript開發原生的iOS和Android應用。可是目前由於受權的問題,React受到衆多開發者的抵制。因此雖然不少公司的項目用的是React,做爲新手的你也可能常常聽人提到,可是,謹慎考慮是否用它。

對於iPhone手機遊戲開發來講,因爲Cocos2d-x引擎的迅速普及,C++的使用頻率也大大增長。此外,主流的3D商業引擎Unreal Engine4使用的就是C++語言。而另外一個主流的手遊開發引擎Unity則主要使用C#和Javascript腳本語言。

總之,對於iPhone應用開發來講,最主要接觸的語言是Swift和Objective-C,部分狀況下也會用到C++和C,以及javascript等腳本語言。


考慮到本教程的不少讀者從未接觸過任何編程語言,這裏對其它幾個主流語言的特色和做用稍微說明一下:

1.Java語言是當今最廣泛使用的開發語言,它簡單易學(相對C++,C和Objective-C),且跨平臺性很是強,對網絡開發的支持使人稱讚。不少企業使用Java語言來開發商業相關的網絡應用。此外,Java語言也是開發Android應用的必備工具。

2.C語言是幾個主流開發語言(Java,C++,C#,Objective-C)的根基所在。常有人說,學好C語言,其它的語言就會一通百通。由於對硬件底層性能的支持超強,它的主要應用領域是嵌入式開發、遊戲引擎開發等偏底層的部分。C語言基本上已經取代了彙編語言和機器語言在底層開發的做用。

3.PHP語言主要用於開發網絡應用(特別是web服務器端,也就是用戶不可見的部分,如結合MySQL進行後臺數據傳輸處理等),相對其它幾門語言,它很是容易上手。但它的侷限性在於除了web應用,對其它應用的開發力不從心。

4.Javascript語言主要用於開發Web前端(也就是用戶可見的部分),隨着HTML5技術的興起,Javascript語言必將是將來三到五年的主流Web開發工具。在主流的3D遊戲開發引擎Unity中,一樣支持使用Javascript做爲腳本編程語言。此外,Facebook的開源項目React Native可讓開發者使用Javascript語言輕鬆開發原生的iOS和Android應用。

5.C#語言是微軟爲了對抗Java語言的強勢而自行開發的一種編程語言。它和Java同樣簡單易學(一樣是相對的),但只能支持微軟的平臺。聞名業界的.NET就是C#語言的最佳搭配。但隨着微軟在移動互聯網領域的式微,C#的地位和前幾年比起來大有降低。

不過雖然.NET和C#在Web開發領域的空間愈來愈小,但C#也有新的應用領域,目前最火爆的移動平臺3D遊戲開發引擎Unity3D主要支持C#和javascript開發,而windows手機平臺的捲土重來也讓C#有了新的機會。

6.Python,Ruby,Perl同PHP語言的做用相似,屬於腳本語言,對於開發網絡應用很是高效。其中Python和另外一種腳本語言Lua還常在遊戲中做爲腳本語言使用。

對於Python要特別補充一點,在2016年下半年開始異常火爆的AI(人工智能)技術中,特別是深度學習等領域,科學家和開發者大量使用Python語言和相關框架。曾經的超輕量級腳本語言在一個超重量級的應用領域重獲新生,並且愈來愈受人歡迎。

7.Go語言,一門全新的系統級語言,由Google開發,於2009年發佈。雖然它的歷史很是短暫,但根據目前的發展來看,Go語言有望在將來十年成爲一款成功的系統級語言。Go語言功能強大,能夠替代C++。

在TIBOE2017年最新的編程語言排行榜上,Go語言已經從去年的38位急速攀升到14位。

8.Basic(Visual Basic)語言,曾經風騷一時,若干年前不少編程入門課程必教的開發語言。其學習曲線很是平緩,易於上手,但實際項目中用到的不是不少。

9.SQL語言,這是目前最重要的關係數據庫操做語言,其影響已經超出數據庫領域,在不少其它領域獲得採用,好比人工智能領域的數據檢索,軟件開發工具中嵌入SQL的語言等。SQL語言是一種交互式查詢語言,容許用戶直接查詢存儲數據,但它並非完整的程序語言,沒有DO或FOR相似的循環語句,但能夠嵌入到另外一種語言中,經過接口發送到數據庫管理系統。

10.彙編語言,雖然如今是高級編程語言的天下,但性能超強的直接面向硬件的彙編語言仍然在嵌入式開發領域佔據着一席之地。只是彙編語言和硬件自己的關聯很大,因此普及性通常。目前彙編語言的江湖地位已被C語言替代,但在某些領域還有本身的一席之地。

11.Kotlin語言,Google推出的一門全新的編程語言,用於在Android應用開發中取代Java的地位。


其它語言相對來講比較冷僻,或者曾經熱門但現在使用的人不多,用不到的時候能夠無論。

爲了讓你們對各類編程語言的江湖地位有所瞭解,不妨看看TIOBE 最新的2017年9月編程語言排行榜~


2014年9月的時候,蘋果的御用開發語言Objective-C是Top3的編程語言。可是自從2014年蘋果WWDC上發佈了新的Swift語言後,Objective-C的排名迅速降低到現在的Top18,而Swift則上升到了Top13。

科普知識到此結束,咱們不打算對Swift語言的特性作詳細的介紹,否則極可能5分鐘不到你就睡着了。咱們將在建立項目的過程當中一步步解釋你所遇到的語言。包括什麼是變量,什麼是對象,如何調用方法(發送信息)等等。

固然,若是你須要一本隨時能夠查詢的工具書,咱們強烈推薦蘋果的官方Swift指南。

好了,有了這麼多的基礎作鋪墊,咱們能夠進入正式的開發了!



著做侵刪

相關文章
相關標籤/搜索