让不懂编程的人爱上iPhone开发2020 Swift版01

作者: eseedo 分类: iOS入门 发布时间: 2020-01-29 21:56

引子:

开始之前,先提出两个问题:

1.都2020年了,作为新手,你还有必要学iOS开发吗?特别是有了RN和Flutter这样的第三方利器,Native开发学起来还有意义吗?

2.这个系列的课程已经更新了好几版了,今年还有必要更新吗?

如果不喜欢看长篇大论的,我就先给出答案。

第一个问题:看情况。

作为新手,如果你现在急需找到一份开发类的工作,那么不建议你学iOS Native开发,同时本系列教程剩下的内容就不建议你看了。一个比较实际 建议是,你可以看看现在拉勾和BOSS直聘上最火的职位是什么,然后什么🔥就去学什么~但是要提醒你的是,现在火的3-5年后未必继续火。

排除以上情况,可以花个5-10分钟看看下面的内容。

第二个问题:很有必要。

请仔细看我的说明。

先来回答第一个问题。

虽然自己是计算机相关专业出身的,但是造化弄人,毕业后的第一份工作和编程并没有太直接的关系。

直到2007年的MacWorld大会上,作为资深苹果粉丝的我看到了乔帮主所祭出的神器iPhone。那一刻,就像是一直怀疑自己活在梦里的范闲在长衣飘飘古风横溢人人身佩长剑大刀的庆国突然发现了那把战神的利器巴雷特m82a1。

但对我来说,更重要的事件发生在2008年的3月12日。那一天乔帮主发布了iPhone OS(现在的iOS),而且允许第三方开发者开发属于自己的应用。

iOS之父Scott Forstall意气风发的上台讲解iPhone 的Core OS构成。

还演示了史上第一款iPhone游戏,由苹果内部员工开发的Touch Fighter。

相信彼时彼刻,Scott Forstall的笑容是发自内心的骄傲和甜蜜…

One more thing…

KPCB的知名投资人John Doerr走上台前,宣布了1亿美元的iFund计划,使之成为史上第一只专门针对iOS移动应用的创投基金。

John Doerr在现场说了一句话,让我至今记忆犹新。

“Today, we’re witnessing history–the creation of the third great platform.It’s bigger than the personal computer.”

令人印象更深刻的是,John Doerr说这句话的时候是一词一顿,且咬牙切齿意志坚定心无旁骛。

在当时很多人的眼里,John Doerr这段话有点大言不惭,或者说干脆有着为乔布斯站台的嫌疑。

”Bigger than the personal computer.”比PC平台还要大,这可能吗?

无怪乎从Google到Dell,甚至到Bill Gates,都对iPhone的未来不怎么看好。

但是结果怎样,相信看这篇文章的几乎每个人都已经完整亲历了属于移动互联网的黄金十年。

乔布斯的苹果不仅仅重新发明了手机,还创造了整个移动互联网的产业链和生态链。

在这10年里,iPhone从一个另类的科技魔法玩具成长为改变了好几个行业的神器。当年为数甚少的果粉在人群基数急剧扩大的同时也变得鱼龙混杂,为果黑所不齿。

移动互联网果然在十年之间成长为比PC和互联网更为引人注目的焦点和主流。

而在这十年里面,我也因为受到乔帮主和John Doerr的“忽悠”,重新捡起了遗忘的coding,想要用自己的智慧去创造一些不一样的东西。

10年弹指一挥间,随着人口红利的耗尽和宏观经济的变化,移动互联网在2017年达到巅峰之后的增长逐渐停滞。

在总量开始逐步稳定和下滑的前提下,各家手机厂商的首要任务不再是把蛋糕做大,而是开始你死我活的厮杀,在已经不可能大幅度增长的市场中分隔利益。

从2018年开始,国内的科技巨头开始了不同的路线演化。一个以阿里和腾讯为首,喊出了进军产业互联网的口号,并尝试探索新零售和所谓的下沉市场。而另一条路线则由华为、百度和大疆引领,力图在自主研发的技术路线上追赶国外的FAANG,寻找下一个有望取代移动互联网的新技术平台。虽然两条路线互有交叉,但彼此的战略侧重点却大不相同。简单来说,一个是市场模式创新驱动,一个是产品技术创新驱动。

回到移动互联网行业,凭借iPhone和AppStore一手打造了整个产业生态链的苹果在行业进入增长停滞期之后的日子并不好过。

如同当年的PC市场,行业高速增长阶段时大家追求的是各种新鲜酷炫的功能特性,而当行业增长逐渐停滞时,性价比就成了大家选择产品的最重要因素。

对于苹果来说,连续失去精神领袖乔布斯和产品设计的灵魂人物Ive爵士之后,在iPhone上的产品技术创新越来越乏力。再加上整个行业的增长开始停滞,光靠品牌效应就想支撑既有的高价策略,苹果显然不再是三星和华为的对手。

简单来说,iPhone虽然持续给苹果带来巨大的销量和利润,但同时也让公司陷入了某种增长陷阱。想想曾经遇到过类似情况的柯达、摩托罗拉和诺基亚,令人不寒而栗。

作为一个多年的果粉,虽然我很钦佩库克的商业运作能力,但是对苹果近8年来在产品技术创新的疲软还是深为痛心。

在2019年春季的苹果发布会上,库克高调宣布了苹果今后的新“三驾马车”战略-硬件、软件和服务。作为一个没有管理过大型科技公司的键盘侠,对此当然是不置评论。但不管苹果采取何种战略,我始终认为,之所以全球有这么多的苹果粉丝,不单纯是因为人傻钱多,而是苹果Think Different的精神,以及Technology+Arts的产品设计理念。

如果没有了这些,苹果可能仍然是一家庞大的科技公司,甚至在市值上仍然可以长期独占鳌头,但它将失去几乎所有忠诚的苹果粉丝,包括我。

Google、Amazon、微软和Facebook很酷,百度、阿里、腾讯、今日头条、华为都很NB,但能够让我成为忠诚粉丝甚至信徒的,整个地球上只有一个苹果。或许,马斯克掌管下的特斯拉算另外半个。

那么,对于新手来说,2020年到底还该不该学iOS开发了?

首先,移动互联网的增长停滞了,但是仍然拥有一个庞大的存量市场。对于面向C端的应用来说,所谓的存量市场就是对现有应用的维护和更新,以及添加新的特性。

其次,面向C端的应用市场已经趋于完全饱和,但面向B端的所谓产业互联网市场仍然有较大的空间,这也是阿里和腾讯等公司想去攻占的新市场。

最后,虽然移动互联网的好日子到头了,但是新兴的AR市场才刚刚起步。就在最近,Tim Cook在东京都接受日经新闻专访时表示,AR将成为下一个系统级的平台,同时也是苹果未来的最大核心科技。

我个人很看好AR,但对于在看教程的你来说,可以完全有自己不同的判断~

好了,每年一度的苹果粉丝YY到此结束,进入正式的课程环节。

等等,还有第二个问题没有回答。

这个系列的入门课程年年更新,今年还有必要继续更新吗?

回答是:

必须的!

原因很简单,从iOS13开始,苹果引入了SwiftUI。和UIKit不同的是,使用SwiftUI开发的iOS应用可以非常轻松的移植到苹果的其它产品平台:macOS,watchOS和tvOS。

可以想象的是,2-3年之后苹果AR眼镜上市的时候,rOS(Reality OS)也会随之而来。

已经了解过一些iOS开发的朋友肯定都知道UIKit,从iOS 2.0开始它就一直沿用至今。UIKit基于更古老的开发工具AppKit,从2001年开始就被用于macOS系统的桌面软件开发之中。

而AppKit则源自上古时代的NeXTSTEP,之所以说上古时代,是因为NeXTSTEP问世的时候很多90后都还没出生~

乔布斯1984年被苹果放逐之后,创办了一家新的名为NeXT的公司,1997年苹果以收购的形式把NeXT和乔布斯一同打包回家了。苹果如今的macOS操作系统就是基于NeXT的操作系统。

UIKit问世于大概十年之前,当时的人们对于完全基于触摸屏的智能手机还比较陌生。乔布斯的苹果凭借iPhone开创了全新的智能手机和移动互联网时代,而善于模仿借鉴的Google公司则凭借安卓让全球的大多数普通用户得以人手一部智能手机。从某种意义上来说,苹果和谷歌在移动互联网时代的关系就类似当年PC时代苹果和微软的关系。

在移动互联网行业发展的早期,人们对移动应用的普遍认识是,“移动应用和桌面软件类似,只是运行在拥有更小屏幕和更弱性能的移动设备上而已。”早期的iOS应用采用Objective-C,它的历史可以追溯到上世纪80年代。

从2017年开始,移动互联网已经发展到了巅峰,智能手机也从当初的奢侈品变成了人手一部的日常用品。Swift语言和SwiftUI的诞生也正是顺应了这一时代潮流。如今人们早就已经认识到,移动应用不仅仅是桌面应用的移植版,而是基于移动设备本身特点的定制开发版。

正因为此,苹果将此前大一统的iOS系统进一步分拆为针对智能手机的iOS,针对iPad的iPadOS,针对智能手表的watchOS,针对智能电视的tvOS。当然,还有所有这一切的鼻祖macOS。

随着5G和AI/AR/VR时代的即将来临,万物互联和智能化将是一个普遍的趋势。

可以预见的是,10-20年之后,你身边的万事万物可能都会有一个app。苹果为此铺设了一个宏伟的前景,而SwiftUI则是为此准备的一大开发利器之一。

当然,以上纯属个人YY,大家看看就好,可以一笑而过~

课程说明:本系列教程针对入门新手!之前已有iOS开发经验的可以绕行~

但是,想了解SwiftUI的老手也不妨可以大概的过一遍,毕竟是全新的内容。

本系列教程来源:https://store.raywenderlich.com/products/ios-apprentice

我在英文教程的基础上翻译整理,同时加入了自己的一些理解和建议。

不过对于英文比较好的童鞋,我一向建议直接购买学习相关的英文课程。

适合看本系列教程的对象:

1.从未学过编程,或者对Swift语言一无所知,但要懂一些常用的英语单词

2.从未学过iOS开发

3.喜欢苹果,充满想象力,喜欢创造,同时也愿意承受学习的压力,愿意投入时间和精力

*.熟悉UIKit,但是对SwiftUI一无所知的老鸟

如果你只是想了解下Swift语言的开发知识,那么建议直接阅读苹果的官方文档,或另外一份教程(Swift开发入门系列教程)。

简介:

人天生就喜欢游戏,所以我们要开发的第一款应用不会是苍白无力的”Hello World”,而是一个小游戏,名为Bull’s Eye(拖拖看)。虽然这个游戏非常简单,但如果你从未接触过编程,可能还是会遇到一些困难。但是不要担心,即便你第一遍接触这些新概念的时候还有些含糊不清,但我们会在整个系列的教程中不断重复,直到它们成功的进入你的潜意识,甚至在梦中都不会忘记~

需要提醒大家的是,学习一门语言或工具的最好方式是练习和实践。因此,对于初学者来说,千万不要只是看过一遍了事,而应该自己手动敲入所有的代码,甚至故意修改其中的代码,刻意制造一些bug,然后想办法解决。而在学完本教程之后,要立即开始实战,同时多看苹果官方的示例代码和Github里的示例。不要害怕麻烦和错误,在解决麻烦和修正错误的过程中,你能更深入的领会为何要这样做,而不仅仅是简单的copy和paste。

在学习的过程中,会要求你自己做一些思考和练习,而不是完全被动的接受。仅仅知道前面有这样一条路和自己亲自走过这条路是完全不同的感觉。学习编程唯一有效的途径就是在思考的同时要自己写代码。

前面说了,本系列教程是针对完全的菜鸟来设计的。也就是说,哪怕你是个完全不懂编程的文科生,我们也有信心让你爱上iPhone开发。当然,如果你懂一点编程知识,学习起来会快很多。

处女座或强迫症患者必读:

开玩笑,处女座的童鞋们表打我~ 如果你在第一遍开教程的时候有些东西不能百分百理解,最好的方式不是立即钻牛角尖死磕到底,毕竟你没有打过很好的编程底子,这样做会让你很快丧失信心,甚至很快放弃。碰到这类情况,哥建议你先把问题放在那儿(或者记下来),然后继续看下去。等到整个教程看完了,回过头再看你之前遇到的问题,如果还是不能理解,那么再看一遍。(其实90%的可能性是,等你回头再看当时觉得比相对论和量子力学还难理解的问题,现在就是小学加减法的水平)。因为在整个教程的学习过程中,我们会对一些重要的概念不断重复,直到你觉得跟吃饭走路一样自然。

如果说Objective-C曾经是学习iOS开发的最大障碍,那么这最后一点点担忧也不需要了,因为在2014年的WWDC上苹果发布了一个新的编程语言-Swift。 它可以让开发者在很短的时间里面轻松上手,如同javascript一样,与此同时它的性能又不会比Objective-C差多少,起码和Java差不多。

对当前主流开发语言的上手学习难度排个序,大致如下(从最难到最简单):

机器语言 >汇编> C++ >Objective-C > C, Lisp,Prolog>C# > Java ,Go> Python,PHP, Swift, Javascript, Ruby

正如刚才所提到的,对于汇编以下难度的语言,只要真正学懂一门, 再学其它的编程语言会轻松很多。毕竟在现实的世界里,真正的程序猿和攻城师很少只会一门开发语言的。只懂一门开发语言能活到现在的要吗是某个方面的顶级专家,要吗就是走了技术转管理的路线。

在我们的教程中,不会也不可能教你学习所有和iPhone开发的知识。iOS SDK(开发工具包)非常庞大,除了苹果的官方技术文档,市面上没有任何一个教材可以涵盖iOS开发的全部内容。我们只会教你了解Swift和iOS开发所需具备的核心基础。一旦你掌握了建筑技术,可以自己去探索iOS开发的其它细节。

除了Swift语言和iOS开发工具包的相关知识,我们最重要的目的是让你学会程序猿的思维方式。一旦你具备了这种思维方式,可以完成任何编程任务,不管是游戏,工具,网络应用还是其它你能想到的东西。作为一个程序猿,需要思考解决各种计算问题,并创造性的想出解决方案。一旦掌握了解决问题的方法,不论多复杂的问题都可以解决。这才是本系列教程的终极目的,让不懂编程的人爱上开发!

可以百分百保证的是,你在学习的过程中一定会遇到各种问题。程序代码中会出现无数莫名其妙的bug,让你不知所措。但即便是一个拥有30年以上编程经验的程序猿,也会经常遇到这样的问题。我们只是人类,而人类的大脑在处理复杂计算问题的时候总会出错的。不要害怕出错,但我们会提供一些思维工具,教会你如何填平自己挖的坑。

在我身边有很多人学习iPhone开发的方式是:

从大量的博客和网站中拷贝粘贴代码,而完全不理解这些代码的工作原理,以及该如何将这些代码嵌入到自己的项目之中。从网络中寻找解决方案是一种高效的工作方式,但你必须真正的理解这些代码的作用,才能举一反三。

在本系列教程中 ,我们从一开始就会学习如何构建真正的应用,而不是所谓的baby应用,或是仅仅为了学习目的而设计的简单示例。我们会详细解释其中的每一步操作,并附上丰富的图片帮助大家来理解。

通过这些步骤,你将在制作这些有趣应用的同时逐渐掌握编程的思维和技能。当你最终学完本系列教程后,应该已经掌握了Swift和iOS开发工具包的精髓。更重要的是,你应该学会了如何用程序猿的思维方式来编程和解决问题,并真正开始制作属于自己的应用。对此,我有百分之一千的信心!

当然,最最重要的是,希望大家在看完教程后,能够爱上iPhone开发,爱上用编程语言来创造世界的乐趣~

那还等什么,让我们就此开始吧!

iPhone操作系统到现在已经到了iOS13。本系列教程将完全基于iOS13,并采用全新的编程语言Swift5.1。

既然是学习一门全新的工具,自然要从最新的版本学起,因此,iOS13+Swift5.1+Xcode11是我们的第一选择。

有舍才有得

学习iPhone开发不但可以作为一门兴趣爱好,同样还可以带来不错的收益(如果你能给用户带来不错的产品,或者找到一份提供给力薪水的工作~)。但天下没有白吃的午餐,进行iOS开发也是要花钱的。以下是你需要投资的:

1.一台iOS设备:

iPhone或iPad touch。只用虚拟机永远没法学会真正的开发。当然,为了支持最新的iOS系统,就不要买太老型号的设备了,比如iPhone4之类的。

因为本系列教程将使用iOS13,所以大家也要了解下支持iOS13的设备:

iPhone:

iPhone 11/iPhone 11 Pro/ iPhone 11 Pro Max

iPhone XS/XS Max/XR

iPhone X

iPhone 8/8 Plus

iPhone 7/7 Plus

iPhone 6s/6s Plus

iPhone SEApple iPhone 11 (A2223) 128GB京东¥5999.00去购买

iPad:

iPad Pro(所有版本)

iPad 5及后续

iPad Air 2或3

iPad mini 5Apple iPad 平板电脑 2019年新款10.2英寸京东¥2999.00去购买

iPod touch:

iPod touch第7代

当然,如果你希望在自己的应用中提供虚拟现实(ARKit 3)或人工智能(Core ML)相关的特性,那么就必须使用支持A12或A12X芯片的设备,具体来说是这些:

iPhone XR/iPhone XS/iPhone XS Max

iPhone 11/iPhone 11 Pro/ iPhone 11 Pro Max

iPad Pro(2018年及之后的版本)Apple iPad Pro 11英寸平板电脑 2018年款京东¥6899.00去购买

对于需要同时学习苹果ARKit开发的童鞋,个人建议直接购买可以支持ARKit 3的设备。对于苹果和AR来说,2020年或许是一个全新的起点。

2.一台使用Intel内核处理器的Mac电脑:

建议安装最新的macOS 10.15 Catalina或至少是上一代的macOS 10.14.4 Mojave。建议电脑的内存在4G以上,否则你会很痛苦的。。。

考虑到苹果引入了全新的SwiftUI,用macOS 10.15可能更合适。

有人说可以用黑苹果在PC上开发,我的建议是,宁可买一台二手的MAC,也不要用PC开发。否则,你会遇到各种莫名其妙的问题,而且对提高你的编程思维没有任何帮助。

对于预算不足的童鞋,我建议还不如租一台学习期间用着,或者买一台二手。

但如果实在你就是想用PC,那我的态度是:不支持,不建议,不鼓励,不帮助~

对一般的入门开发者来说,如果不是同时还身兼设计师的重任,那么一台13寸的Macbook Air或Macbook Pro就可以满足要求了。Apple 2019款 MacBook Pro 13.3【带触控栏】京东¥10688.00去购买

3.一个付费的iOS开发者账号

有了开发者账号,最简单的装B方式就是当苹果发布了新的beta版系统时(特别是大版本的更新,比如从iOS12到iOS13),你可以第一时间在自己的iOS设备或者电脑上体验。

当然,最重要的是可以将自己开发的产品放到苹果AppStore里面销售,赚取真金白银,当上CEO赢取白富美从此走上人生巅峰。

如何申请付费的iOS开发者账号

狠简单,直接到这里就可以了:

https://developer.apple.com/programs/ios

整个过程其实很简单,不过你需要先注册一个Apple ID,因为你的开发者账号会与之绑定。其实一年99美元的费用并不高,如果你是真心想学iOS开发,建议还是花了这笔钱。 而且苹果现在相当厚道的一点是,只要加入一个开发者计划,就可以为iOS设备,Apple Watch, Mac,Apple TV等苹果全系列硬件产品开发应用。而在此前iOS开发和Mac开发是两个完全不同的开发者计划,每个都要单独收费的哦~

当然,如果朋友们只是想观望下,还不想花一毛钱,更没想过在App Store里面发布作品。那么你也可以直接用自己的Apple ID来登录,同样可以免费使用Xcode开发工具,也可以在设备上进行测试。但是没法获得最新的Beta版本,更不可能将产品发布到App Store里面。

不过,我眼中的iOS开发入门的最基本标准是,要有一款完全由自己独立设计开发的并通过苹果官方审核上架销售的App产品。这个标准其实不算高,但也不是随随便便就可以混过苹果官方的法眼的~

强大的Xcode

Xcode是开发iPhone应用的主要工具。Xcode带有一个文本编辑器,可以让你敲入自己的代码,同时还有一个可视化的工具由来设计应用的用户界面。Xcode可以将你编写的源代码编译成可执行的应用,并在模拟器(Simulator)或设备上进行测试。同时,Xcode还带有一个debugger(调试器),用于帮助你发现代码中的错误(很遗憾,目前它还没法自动帮你修复bug,这一天的到来还需要更给力的人工智能)

下载Xcode的方法很简单,最通常的做法是在Mac App Store里面搜索Xcode,并下载安装就好了(https://apps.apple.com/app/xcode/id497799835)。

再次提醒,下载Xcode,Unity和Cocos2d-x等开发工具时一定要从官网下载,建议只使用普通的http下载链接下载,或使用官方的下载工具(比如Unity Hub,苹果的Mac App Store),尽量不要使用任何第三方下载工具(比如迅雷之类的)。

如果你的操作系统不是macOS Catalina,那么建议先升级操作系统。

本系列教程用的Xcode版本是最新的Xcode 11.3(11C29),而iOS版本是13.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的,但是从这几年实际的情况来看,至少在海外Objective-C语言的使用频率仍然很高。

这里不得不提到C++语言,事实上C++和Objective-C语言几乎是同时出现的。和Objective-C语言的简洁不同,C++语言几乎包含了所有可能的特性。作为一门编程语言,它非常强大,且执行效率超高。事实上,所有的操作系统,以及大量的网络游戏,主机游戏和PC游戏,游戏引擎都会使用C++来开发。C++的问题在于,对于一个新手来说,它异常复杂,包括了基本语言结构,面向对象开发和模板、标准库等诸多内容。学习C++还是颇有难度的,仅次于汇编语言。不过C++11(2011年的新标准)这一C++的最新版本在很多方面做了大的改进,相信会让这门“古老”而又强大的编程语言更加褶褶生辉。

在进行iOS应用或游戏开发的时候,我们可以混合使用C,C++和Objective-C(简称为Objective-C++)。

对于日常的移动应用开发,如果对性能要求没那么高,而且不怎么需要用到一些比较新的框架(ARKit,CoreML等),那么也可以考虑使用RN和Flutter这类第三方的开发工具来代替。

Facebook在2015年开源的React Native可以使用Javascript开发原生的iOS和Android应用。

而一向喜欢在开发工具链上瞎折腾的Google也推出了Flutter(使用Dart语言)。

使用这两种开发工具,可以比较方便的开发跨平台(主要是iOS, Android)移动应用。但是使用这种跨平台开发工具的代价就是,相比Native原生开发必然会牺牲一些性能和效率(非开发效率)。此外,一些新的框架(比如ARKit,CoreML等),RN和Flutter的支持有限且滞后。

我不反对用RN或Flutter,具体如何选择需要根据项目需要。对于新手来说,简单的判断就是要看目标公司和职位是否对相关的技术栈有实际的应用。

对于iPhone手机游戏开发来说,由于Cocos2d-x引擎的迅速普及,C++的使用频率也大大增加。此外,主流的3D商业引擎Unreal Engine4使用的就是C++语言。而另一个主流的手游开发引擎Unity则主要使用C#脚本语言。

总之,对于iPhone应用开发来说,如果是Native原生开发,最主要接触的语言是Swift和Objective-C,部分情况下也会用到C++和C,以及javascript等脚本语言。如果使用第三方工具,可以考虑RN或Flutter。如果涉及到后台服务器端的开发,那么有可能还会接触Java,PHP/Python等。

对于本系列教程,不会涉及到相关的内容。

考虑到本教程的很多读者从未接触过任何编程语言,这里对其它几个主流语言的特点和作用稍微说明一下:

1.Java语言是当今最普遍使用的开发语言,它简单易学(相对C++,C和Objective-C),且跨平台性非常强,对网络开发的支持令人称赞。很多企业使用Java语言来开发商业相关的网络应用。此外,Java语言也是开发Android应用的必备工具。当然,正如我之前所提到的,程序猿要养成的一个基本习惯就是要学会与时俱进,不能一直吃老本。比如Google目前正在力推由JetBrains开发的新语言Kotlin,并让它正式成为Android官方支持的开发语言。但是还是那句话,一门新编程语言的普及需要足够的时间,这个普及时间至少是以5-10年为单位的。而且我这里不得不吐槽一下Google,它经常会推出一些实验性的产品和工具,然后若干年后看到市场反映不好就果断放弃~对于公司自身的利益来说,这样做无可厚非,但是对于选择了追随它的小白鼠们来说,那种感受可是刻骨铭心的痛。

2.C语言是几个主流开发语言(Java,C++,C#,Objective-C)的根基所在。常有人说,学好C语言,其它的语言就会一通百通。因为对硬件底层性能的支持超强,它的主要应用领域是嵌入式开发、游戏引擎开发等偏底层的部分。C语言基本上已经取代了汇编语言和机器语言在底层开发的作用。

3.PHP语言主要用于开发网络应用(特别是web服务器端,也就是用户不可见的部分,如结合MySQL进行后台数据传输处理等),相对其它几门语言,它非常容易上手。但它的局限性在于除了web应用,对其它应用的开发相对力不从心。

4.Javascript语言主要用于开发Web前端(也就是用户可见的部分),随着HTML5技术的兴起,Javascript语言成为目前的主流Web前端开发工具。此外,Facebook的开源项目React Native可以让开发者使用Javascript语言轻松开发原生的iOS和Android应用。

5.C#语言是微软为了对抗Java语言的强势而自行开发的一种编程语言。它和Java一样简单易学(同样是相对的),但只能支持微软的平台。闻名业界的.NET就是C#语言的最佳搭配。但随着微软在移动互联网领域的式微,C#的地位和前几年比起来大有下降。

不过虽然.NET和C#在Web开发领域的空间越来越小,但C#也有新的应用领域,目前最火爆的移动平台3D游戏开发引擎Unity3D主要支持C#开发。

6.Python,Ruby,Perl同PHP语言的作用类似,属于脚本语言,对于开发网络应用非常高效。其中Python和另一种脚本语言Lua还常在游戏中作为脚本语言使用。

对于Python要特别补充一点的是,在2016年下半年开始异常火爆的AI(人工智能)技术中,特别是深度学习等领域,科学家和开发者大量使用Python语言和相关框架。曾经的超轻量级脚本语言在一个超重量级的应用领域重获新生,而且越来越受人欢迎。

7.Go语言,一门全新的系统级语言,由Google开发,于2009年发布。虽然它的历史非常短暂,但根据目前的发展来看,Go语言有望在未来十年成为一款成功的系统级语言。Go语言功能强大,可以替代C++。

如果说Go语言有什么不稳定性因素的话,那就是它也是Google推出的。

考虑到Google过往的做派,它是否会对Kotlin, Dart和Go等新的开发语言和工具持续进行不遗余力的支持,真的真的真的还有待观察~

如果有一天Google突然宣布不再支持甚至完全遗弃曾经力推的这些语言或工具,我丝毫不会觉得奇怪。即便这些语言和工具完全开源,但如果得不到主流厂商的支持,其结果也很有可能是昙花一现。

8.Basic(Visual Basic)语言,曾经风骚一时,若干年前很多编程入门课程必教的开发语言。其学习曲线非常平缓,易于上手,但实际项目中用到的不是很多。不过基于VB而诞生的http://VB.NET做了巨大的改动,并一举成为编程语言兵器谱上排名第6的神兵利器。

9.SQL语言,这是目前最重要的关系数据库操作语言,其影响已经超出数据库领域,在很多其它领域得到采用,比如人工智能领域的数据检索,软件开发工具中嵌入SQL的语言等。SQL语言是一种交互式查询语言,允许用户直接查询存储数据,但它并不是完整的程序语言,没有DO或FOR类似的循环语句,但可以嵌入到另一种语言中,通过接口发送到数据库管理系统。

10.汇编语言,虽然现在是高级编程语言的天下,但性能超强的直接面向硬件的汇编语言仍然在嵌入式开发领域占据着一席之地。只是汇编语言和硬件本身的关联很大,所以普及性一般。目前汇编语言的江湖地位已被C语言替代,但在某些领域还有自己的一席之地。

11.R语言。R语言主要用于数据统计分析和绘图,是一个免费开源的语言,是1980年左右的S语言的一个分支。近年来随着大数据、云计算和人工智能概念的兴起,R语言也从科学家和统计学家的小圈子里面走了出来,被更多的人所了解和使用。

其它语言相对来说比较冷僻,或者曾经热门但如今使用的人很少,用不到的时候可以不管。

为了让大家对各种编程语言的江湖地位有所了解,不妨看看TIOBE 最新的2019年12月编程语言排行榜~

科普知识到此结束,我们不打算对Swift语言的特性做详细的介绍,不然很可能5分钟不到你就睡着了。我们将在创建项目的过程中一步步解释你所遇到的语言。包括什么是变量,什么是对象,如何调用方法(发送信息)等等。

当然,如果你需要一本随时可以查询的工具书,我们强烈推荐苹果的官方Swift指南。

好了,有了这么多的基础做铺垫,我们可以进入正式的开发了!

更新进度提示:

后续内容预计到2020年春节前更新完毕。

答疑:

如有问题,请在这里发帖(http://www.vr910.com/bbs/forum.php?mod=forumdisplay&fid=64

之前有不少童鞋用邮件或微信,邮件还稍好一点,微信回复真的是有点蛋疼。

另外,为了节省时间,请提问的时候尽量附上项目源代码以及以下信息:

1.开发环境(系统版本,Xcode和iOS版本)

2.问题描述及重现(想实现什么效果,结果是怎样的,具体涉及到什么操作)

3.为解决问题所做的努力(做了哪些尝试,分别是怎样的结果)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注