Skip to content

如何成为一名iOS开发者

助你实现目标所需的技能、资源与人际网络搭建

作者:Paul Hudson 2023年10月31日

在本文中,我想带你了解在我看来2021年成为一名iOS开发者所需具备的条件。本文主要面向两类人群:一是Swift纯新手——即从未为iOS开发过任何应用的人;二是所谓的“伪新手”——即那些可能之前尝试过学习Swift,但但始终未能实现全职工作目标的人。

无论你目前处于哪个水平,本文的目标都是一致的:帮助你做好充分准备,从而能够申请公司的初级iOS开发者职位。

我们将探讨你应该学习的技能、可以参加的课程、如何融入相关社区、人们在学习过程中常犯的错误等内容,而且最重要的是,我所提及的所有内容都是完全免费的,你无需无需分文便能跟随学习。

说真的,太多人认为花大价钱是实现理想工作的捷径,但实际上,最重要的是决心和毅力。给你一个小提示:如果你现在就想着跳过本文的某些部分,那或许你应该先锻炼一下自己的毅力!

本文包含7个部分:

  1. 找工作必备的核心技能。
  2. 值得学习的拓展技能——若你有时间学习这些技能,它们能让你在众多求职者中脱颖而出。
  3. 人们在学习过程中常犯的错误。
  4. 完全免费的Swift学习资源。
  5. 如何融入融入iOS开发社区。
  6. 实现目标大致所需的时间。
  7. 为申请第一份工作做准备
  • 本文也有视频版本,内容完全相同,你可以选择最适合自己的形式学习。

赞助内容 减少身份验证相关的代码编写工作,将更多时间投入到打造应用的独特功能上。Clerk的iOS SDK和SwiftUI组件可在几分钟内为你提供可投入生产环境的身份验证功能。

iOS开发者需要具备哪些核心技能?

要找到一份一份iOS开发工作,最基本需要掌握哪些技能呢?我认为总共需要掌握5项内容:

  1. Swift语言
  2. SwiftUI框架
  3. 数据处理
  4. 网络请求
  5. 版本控制

就是这5项。我特意将这份技能清单列得这么简洁,原因如下:

  1. 你学得越多,就越会发现还有更多知识需要学习。因此,很容易陷入长时间学习和练习的过程中,偏离真正的目标——你是想成为一名iOS开发者,而不只是一味地学习新知识。
  2. 几乎可以肯定的是,你加入的团队大概率已经有了正在开发的应用,需要你协助完善。除非你特别幸运,否则他们肯定需要教你很多东西——如果你事先入职前就硬塞进一堆额外的知识点,很可能是在浪费时间。
  3. 这5项技能中有两项内容量大且复杂,你可能需要花好几个月时间才能完全理解,根本无暇顾及其他内容。
  4. 但最重要的是,只要掌握了这5项技能,你就能开发出各种各样的应用。当然,你写的代码可能并不完美,但这没关系——要写出优秀的代码,必先写出大量不够好的代码,这是必经之路。

下面我将这5项技能拆解成更细致的内容。

学习Swift语言

首先是Swift语言。它是苹果公司推出的核心编程语言——本身不涉及在iPhone屏幕上显示信息或从互联网下载数据等功能,就像JavaScript或Python一样,只是一种编程语言。你可以用它来创建变量、编写函数等,本质上就是纯粹的代码。

Swift语言推出才没几年,这意味着它几乎涵盖了所有前沿的编程语言特性。一方面,这让你得以避开C++、Java等较老语言中常见的陈旧特性;但另一方面,它也包含不少较高级的特性,一开始可能会让你感到困惑。不过没关系:Swift的很多部分都相对简单易懂,有些部分则需要更长时间才能真正掌握,所以慢慢来,坚持下去,你终会学好的!

学习SwiftUI框架

我列出的第二项核心技能是SwiftUI,这是苹果公司推出的一个框架,借助它,我们可以使用Swift为iOS、macOS、tvOS甚至watchOS开发应用。也就是说,Swift是编程语言,而SwiftUI则提供了开发应用所需的工具——比如如何显示图片、文本、按钮、文本框、数据表格等等。需要明确的是,SwiftUI并非Swift的替代品,它是建立在Swift基础之上的框架,用于开发应用,所以要想成功开发iOS应用,Swift和SwiftUI两者缺一不可。

如果你觉得Swift已经很新了,那你还没见识到更“新”的——在我创作本文时,SwiftUI推出还不到两年!但尽管如此年轻,iOS社区却对它青睐有加,因为使用它进行开发的体验非常出色。

目前,苹果公司还有一个较老的iOS应用开发框架——UIKit。如果你问不同的人应该先学SwiftUI还是先学UIKit,会得到各种各样的答案。事实上,如果你去看本文对应YouTube视频的评论区,很可能会发现有人指责我不懂行,认为应该优先学习UIKit。

所以,如果你好奇我为何认为应将SwiftUI作为核心技能,原因如下:

  1. 它比UIKit简单得多,而且是“显著”简单——要实现与UIKit相同的效果,使用SwiftUI可能只需要四分之一的代码量,同时你需要学习的内容也更少。这意味着你能更快地取得进展:更快地开发出东西、更快地看到成果、更快地对成果进行迭代优化,这在学习过程中能极大地激发你的积极性。
  2. SwiftUI是专为Swift设计的,它利用Swift的语言特性帮助你避免问题,并实现最佳性能。例如,当你修改应用某个界面上的数据时,SwiftUI会自动确保应用中所有使用该数据的地方都能更新为新数据——你无需自己编写代码来保持数据同步,而数据同步本身其实是个相当复杂的问题。相比之下,UIKit是为苹果较老的Objective-C语言设计的,因此受其开发年代的影响,存在不少古怪的特性和冗余代码。
  3. SwiftUI适用于苹果的所有平台,因此你在iOS上学到的知识,几乎可以用相同的代码开发出macOS或watchOS应用。当然,像数字表冠(Digital Crown)这样的功能只在特定设备上有,但你学到的绝大多数内容在所有平台上都适用。
  4. 但最重要的是,SwiftUI是未来的发展方向。如果你现在——就在当下——申请工作,那么很可能确实需要掌握UIKit;但既然你正在阅读本文,说明你还处于学习的早期阶段。没错,目前UIKit的使用率更高,但当你花6个月、9个月甚至12个月学完相关内容后,SwiftUI将会成为主流的UI框架。

说真的,包括苹果公司自身在内的全球各大企业都在选用SwiftUI。而且苹果公司最近在iOS 14中推出小组件功能时,明确要求必须使用SwiftUI开发——UIKit根本无法实现这一功能。

网络请求与数据处理

我提到的第三项和第四项技能分别是网络请求和数据处理。与Swift和SwiftUI相比,这两项技能对于初级iOS开发者岗位所需的掌握程度来说,简直是小菜一碟。

网络请求指的是从互联网获取数据,或将本地设备上的数据发送到远程服务器。实现网络请求的方法有很多,但说实话,你至少需要掌握的是如何从服务器获取JSON格式的数据。

而这就涉及到另一项核心技能:数据处理。同样,加载和保存数据的方法有很多,但你至少需要能够将通过网络请求从服务器获取到的数据,转换为应用可以显示的信息。

因此,第三项和第四项核心技能实际上是相辅相成的:从服务器获取数据,然后将其转换为应用可显示的信息。有些开发者开玩笑说,这类代码几乎占了iOS开发者工作内容的一半,而且我们确实经常会用到这些技能。

最后一项:版本控制

最后一项技能与编码无关,那就是使用Git等工具进行版本控制。同样,你不需要掌握太多相关知识,但重要的是,你要能够将代码发布到GitHub等平台上,这样招聘人员就能公开查看你的作品。

我认为世界上没有人能完全搞懂Git的所有功能,但这没关系——你只需要掌握足够的基础知识,确保数据安全存储,并能与他人协作即可。

综上所述,这五项技能中,有两项内容庞大且关键(Swift和SwiftUI),另外三项虽内容较少但同样重要。说实话,只要你能专注于这五项技能,不被其他内容分散注意力,就能在通往第一份iOS开发工作的道路上取得巨大进步。

以上就是我认为成为一名iOS开发者所需的五项核心技能。实际上,有很多人只掌握了这些技能,却依然能在App Store上开发并发布出色的应用。

掌握核心技能后该学些什么?

一旦你真正熟练掌握了这五项核心技能,那么你完全有能力独立开发并发布应用,成为一名独立开发者;同时,你也具备了申请初级iOS开发岗位、为企业工作的条件(如果你有此意愿的话)。你不需要其他特殊资质——只要掌握了这些核心技能,就已经处于一个很有利的位置了。

但如果你已经掌握了这些技能,还想进一步提升自己,那么我建议你学习五项拓展技能。这些技能能让你从“有利位置”上升到“绝佳位置”——你会变得更受雇主青睐,能够开发的应用范围也会进一步扩大。

这些拓展技能包括:

  1. UIKit框架
  2. Core Data框架
  3. 测试
  4. 软件架构
  5. 多线程

和之前一样,我会详细解释每一项技能,让你明白我为何认为它们重要,以及为何将它们归为“拓展技能”而非“核心技能”。

学习UIKit框架

首先是UIKit框架。它是苹果公司较老的用户界面框架,自2008年起就被用于开发应用——在我撰写本文时,它已经有13年的历史了,在软件领域,这算得上是“老古董”了。但“老”并不意味着UIKit不好,事实上,当你逐渐熟悉它的工作原理后,会惊讶地发现它其实相当精妙。

有很多理由值得你学习UIKit,例如:

  • 已经有数十万款应用是用UIKit开发的,因此如果你加入的公司拥有一款大型且成熟的应用,那么你几乎肯定需要编写UIKit代码来维护这款应用。
  • UIKit的功能比SwiftUI强大得多——目前有很多功能只能在UIKit中实现,而SwiftUI无法做到。
  • 借助“自动布局”(Auto Layout)技术,你可以创建精度极高的界面布局。
  • 如果你在编码过程中遇到问题,UIKit相关的解决方案会比SwiftUI多,这仅仅是因为它存在的时间更长。

你可能会觉得UIKit听起来很不错,那我为什么将它归为拓展技能而非核心技能呢?这是因为UIKit也存在一些问题:

  • 在UIKit中,几乎所有操作都比在SwiftUI中更复杂,有些操作所需的代码量甚至可能是SwiftUI的一百倍以上。SwiftUI是专为现代iOS开发设计的,因此它会自动帮你完成大量工作。
  • 由于UIKit并非为Swift设计,你会发现它有很多特性在SwiftUI中是不存在的——比如大量的隐式解包可选类型、需要给代码添加特殊的@objc属性才能让UIKit的Objective-C底层识别、显示简单数据还需要使用协议和代理等。
  • “自动布局”一点都不“自动”——事实上,如果你尝试构建复杂的界面布局,很可能会对自动布局感到头疼。它确实非常智能,但在某些方面也极其复杂。

这就是我将UIKit归为拓展技能的原因:与SwiftUI相比,学习UIKit需要花费更多的时间和精力,这也就意味着你需要有更强的决心——你必须是真心想学习它,否则很容易感到困惑、枯燥、烦躁,甚至三者兼具。当然,SwiftUI的功能不如UIKit全面,但至少在学习UIKit之前,你可以通过SwiftUI快速取得进展,感受到学习的动力和成就感。

学习Core Data框架

我提到的第二项拓展技能是Core Data,这是苹果公司推出的用于处理应用数据的框架。在核心技能部分,我同时列出了网络请求和数据处理,确实如此:掌握了这两项技能,你就可以从服务器获取所需数据,并在应用中显示。而Core Data则在此基础上更进一步:它允许你对获取到的数据进行操作,例如查找特定值、对结果进行排序等,而且这些操作的效率都非常高。此外,Core Data还能轻松与iCloud关联,这意味着用户的数据可以在其所有设备上实现同步。

Core Data也有不少缺点,其中最大的缺点就是使用体验往往不太好。Core Data和UIKit差不多是同时期推出的,虽然它在Objective-C中表现出色,但在Swift中使用时,总让人感觉不太顺手。不过,它与SwiftUI的集成度还不错,这在一定程度上降低了使用难度,但它仍然是一个相当复杂的知识点。

那么,我为什么将它列为拓展技能呢?因为和UIKit一样,Core Data的使用率也非常高——数十万款应用都是使用它开发的,无论是大公司还是小公司,很多都在使用它。而且和UIKit类似,Core Data的功能也十分强大,尽管你可以自己编写代码实现它最重要的部分功能,但何必多此一举呢?

验证代码的正确性

拓展技能列表中的第三项是“测试”:编写专门的代码来验证你的主应用代码是否能按照预期运行。测试能确保你的代码正确无误,更重要的是,即使你对代码进行了重大修改,测试也能帮助你确保代码依然正确——如果你修改了500行代码来实现一个新功能,而所有测试都通过了,那就说明你的代码没问题,可以正常使用了。

既然测试如此重要,还能帮助你编写更高质量的软件,那我为什么将它归为拓展技能而非核心技能呢?原因有三点:

  1. 无论出于何种历史原因,整体而言,iOS社区在测试方面做得都很差劲。真的是非常差——很多大型应用几乎没有任何测试代码,而且我已经记不清遇到过多少资深iOS开发者,他们甚至还以从不写测试代码为荣。说实话,我也无法理解这种现象。
  2. 想想看,用苹果的工具和框架能开发出那么多精彩的功能,相比之下,编写测试代码实在没什么乐趣可言。就我个人而言,编写测试代码的感觉就像刷牙一样——虽然知道应该做,但很多人在个人项目中就是提不起兴趣。
  3. 在你申请工作时,掌握Swift和苹果主要框架的知识,总会比掌握测试知识更有优势。公司更希望你懂得如何使用SwiftUI、UIKit或其他重要框架,因为相比之下,测试这个领域的内容要少得多——需要学习的知识点远没有那么多。

所以,测试很重要,也很有意义,我非常希望你能学会如何编写出色的测试代码。但请在掌握了应用开发的基础知识之后再去学习测试——先体验成功的喜悦,感受应用在App Store上线时的激动心情,然后再去钻研测试相关内容。

更智能地构建应用

我想介绍的第四项拓展技能是软件架构,其实质是关于代码的组织方式。在学习初期,你写出的代码可能会很糟糕——糟糕到甚至可能违反了《日内瓦公约》(此处为调侃)。但这没关系,因为学习就是这样一个过程:你不可能一开始就很优秀——你需要经历很长一段时间的“不优秀”,才能逐渐变得优秀,就像勒布朗·詹姆斯也不是天生就是篮球冠军一样。

关键在于,你要坚持改进那些不够好的代码,直到学会更好的编写方式。而软件架构就能帮你实现这一点:它提供了经过验证的代码组织方法,能让代码更易读、更易用、更易修改,并且在长期维护过程中更省心。有时,这些方法会利用Swift的特性——借助语言本身的功能来编写更优质的代码。但还有更多方法适用于任何编程语言,我们通常将这些方法称为“设计模式”。

在学习这项技能时,你首先应该了解的一个重要知识点是如何拆分代码。例如,如果你正在开发应用的某个界面,这个界面上可能有登录按钮、图片画廊和好友列表。但理想情况下,你应该将这些部分拆分成独立的组件——登录按钮组件、图片画廊组件和好友列表组件——这样你就可以在应用的其他部分重用这些组件了。

与我之前提到的其他技能相比,软件架构的主观性要强得多。对于其他技能,比如SwiftUI,你可以这样判断:“我知道如何实现X、Y、Z功能,所以我有信心自己是一名优秀的SwiftUI开发者。”而软件架构涵盖的范围非常广泛,说实话,很多时候解决某个问题并没有明显的“正确”方法。因此,我认为判断自己是否掌握软件架构的最佳标准是:当你回顾半年前、一年前甚至三年前写的代码时,是否会觉得“哇,那段代码太糟糕了!”

同样,只要能帮助你朝着编写“更好代码”的方向前进,写出不够好的代码也没关系。我现在回顾五年前写的代码,有些地方也会觉得尴尬,因为现在的我比当时懂得更多——这其实是一件好事。

掌握并发处理

我想介绍的最后一项拓展技能是多线程,简单来说,就是让代码能够同时处理多项任务的技术。多线程处理可能会非常棘手,因为我们的大脑很难理解这种逻辑——当代码一次只处理一件事时,我们可以按线性顺序去思考;但当两三件事同时发生,甚至可能相互重叠时,就很容易让人摸不着头脑。

因此,尽管多线程作为一项拓展技能很有价值,但你需要谨慎对待——你的目标应该是掌握足够的概念和代码,确保多线程能正常工作即可,无需深入研究过多内容。说实话,很多开发者认为多线程能让代码立即提速三四倍,在某些情况下,确实如此;但在更多情况下,代码运行速度反而会变慢,而且你还需要处理额外的代码复杂度。

如果你不相信我的话,可以看看大卫·史密斯(David Smith)的这段言论——他是苹果公司Swift团队的成员,之前还花了多年时间从事苹果核心框架的开发工作:

我的具体建议是:你真的应该认真考虑不要编写异步/并发代码。我知道在2018年说这话听起来很奇怪,但代码复杂度和性能方面的代价都太高了。

所以,请学习一些Swift中多线程的相关知识,只要能理解其概念和实现方式即可,不要过度深入!

常见错误

到目前为止,我已经概述了成为全职iOS开发者所需的核心技能和拓展技能。但我还想谈谈人们在学习过程中常犯的一些错误,因为我经常看到这些错误,而且知道它们会阻碍人们的学习进度。

先给你一些背景信息:我运营的Swift教学网站每月有超过70万名独立访客,页面浏览量超过500万次,因此我有足够的经验判断人们常遇到的问题。

人们主要会遇到七个问题,我会逐一进行说明。它们分别是:

  1. 试图记住所有内容
  2. “新奇事物综合征”(盲目追求新内容)
  3. 独自学习(闭门造车)
  4. 使用测试版软件
  5. 过度依赖苹果官方文档
  6. 陷入Objective-C的学习中无法自拔
  7. 贬低其他编程语言

下面我们逐一分析这些问题。

别再试图记住所有内容

人们遇到的第一个也是最常见的问题,就是试图记住所有内容——阅读教程时,总觉得必须把里面的所有内容都记在脑子里。求求你,千万别这么做:这种做法注定会失败,而且会耗尽你的毅力,让你再也不想编程。

没有人能记住所有内容,甚至没有人能接近“记住所有内容”的程度。单说苹果公司发布的API(即我们用于开发应用的代码片段),恐怕就有超过10万个。即使只看应用开发的核心组件,也可能有几百个——每个组件的使用方式都非常具体,需要花很多时间学习才能掌握。

实际上,学习过程是这样的:你学会了一项新技能,然后很快就忘了。于是你去查阅资料,再次学习并使用这项技能,之后又很快忘了。当你第三次查阅资料、学习并使用这项技能时,这次你只是“大部分”忘了——有些内容会留在你的脑海里。这个过程会不断重复,每次你都需要参考教程或其他参考资料,直到最终那些真正核心的内容深深印在你的脑海里,让你无需再查阅资料就能熟练运用。

如果你之前没有意识到这一点,那么“遗忘”其实是学习过程中的一个关键环节。每次你忘记某件事然后重新学习时,这件事在你脑海中的印象会更深刻、更牢固。每次重新学习,你的大脑都会将其与其他已学知识建立新的联系,帮助你更好地理解你所做事情的背景。而且每次重新学习,你都在向大脑传递一个信号:这个知识点值得存入长期记忆中。

但如果你一开始就刻意想要记住所有内容,肯定会遇到很大困难。相反,不要担心遗忘:知道去哪里查找资料,比记住实现某个功能的具体Swift代码要重要得多。当你忘记某件事并需要重新学习时,我希望你能把这看作一件“好事”——第二次、第三次甚至第十次学习时,这些知识会在你的脑海中扎根更深,所以你其实是在帮自己的大脑一个忙。

拒绝盲目追求新奇事物

我看到人们遇到的第二个常见问题,我称之为“新奇事物综合征”——他们找到一个适合自己的教程系列,开始取得进展,但一两周后,又看到另一个教程系列,就转而学习新的教程。曾经有人给我发邮件说,他们已经尝试过四五个甚至六个不同的教程系列,却(不知为何)发现自己什么都没学会。

出现这种问题的原因通常是,学习任何知识,很大一部分内容都不那么令人兴奋。这不一定是老师的问题,而是学习编程的一个客观事实——有些内容只需少量努力就能看到很好的效果,而有些内容则需要花更多时间去理解,不仅不会带来酷炫的成果,而且可能只是某个大概念的一部分。

当你遇到这些陡峭的学习曲线时,“新奇事物综合征”就会变得很有诱惑力——既然有这么多免费教程,你可以随时切换到其他教程,重新从简单的部分开始学习,而这些简单内容你可能已经学过了。但除非原来的教程选择了一个特别奇怪的主题,否则你迟早都要学习那些较难的内容,你这样做只是在拖延而已。

所以,我并不是要求你永远抵制“新奇事物综合征”,因为我知道这很难。相反,至少你要意识到它的存在:当你遇到问题时,试着向别人求助,坚持下去,而不是轻易放弃并切换教程。

不要闭门造车

说到向别人求助,我看到人们遇到的第三个问题是,在学习过程中“闭门造车”——他们认为自己完全有能力独自学会用Swift开发iOS应用,不需要别人的帮助。

这种学习方式只对极少数人有效,通常是那些在其他编程语言或平台方面有丰富经验的人。但对于绝大多数人来说,这种学习方式的体验非常糟糕——每一个错误或误解都需要花五倍的时间去解决,很容易失去学习动力,而且你还会错过很多从他人的成功中获得启发的机会。

如果你天生就喜欢这种“闭门造车”的学习方式,我建议你做出改变:分享你的学习内容,找到志同道合的学习者,养成提问的习惯。你会发现,有一个非常棒的学习社区在等着你,他们会给你支持和鼓励;同时,你也会从他人的作品中获得启发,而你的作品也会反过来激励他们。相信我,我见过无数次这样的情况,这种改变的效果是惊人的。

避免使用测试版软件

我看到人们遇到的第四个大问题是,执意使用苹果开发工具的测试版。我能理解这种心情:苹果公司每年都会推出新的iOS、macOS等系统,每次都会带来令人兴奋的新功能,让人们忍不住想要尝试。尤其是考虑到Swift历来有较多更新,人们想学习最新、最棒的内容,这种想法是很自然的。

然而,人们在使用测试版软件学习时,会遇到各种各样的问题:

  • 教程并未针对测试版软件更新,因此按照教程中的步骤操作,可能无法实现预期效果,甚至根本无法操作。
  • 测试版软件通常存在大量漏洞,尤其是在重大iOS更新推出的测试版中,漏洞问题更为突出。
  • 苹果的测试版框架需要时间来稳定,这意味着在测试版1中能正常运行的代码,到了测试版3中可能就无法使用了。

所以,我知道学习新内容很令人兴奋,而且你可能认为掌握新功能能让自己领先一步,但相信我:这并不值得。在你对苹果的开发工具感到熟练之前,请始终使用最新的正式版。

不要过度依赖官方文档

人们在学习过程中遇到的第五个大问题是,过度依赖苹果官方文档。苹果的开发者文档团队确实在努力为公司庞大的框架体系提供尽可能详尽的文档,但他们的主要工作是编写“参考资料”——这些资料是供你在使用特定工具时查阅的,而不是为了帮助你系统学习iOS应用开发而设计的结构化课程。

我已经记不清有多少次,有人问“我该如何学习Swift?”,得到的回答却是“去读苹果的Swift参考指南就行了”。这种方法对某些人确实有效,我自己就是一个例子——Swift刚发布时,我就把参考指南从头到尾读了一遍。但对于大多数人来说,这种做法就像试图通过读词典来学习一门人类语言:词典的目的是涵盖语言中的所有内容,而不是教你最重要的部分以及如何应用这些部分。

因此,如果你在其他编程语言方面有丰富经验,可能会觉得阅读苹果的参考指南很有用;但如果你是初学者,或许可以在几个月后再来看这些参考指南。

别在Objective-C中浪费时间

人们遇到的第六个大问题是,试图学习Objective-C。在Swift推出之前,Objective-C是苹果的主要开发语言。虽然你可能会在一些旧代码库中看到它的痕迹,但现在绝大多数现有代码都是用Swift编写的,而且几乎所有新代码也都采用Swift。

在Swift出现之前,我用Objective-C写了很多年代码,并且真的逐渐喜欢上了它。但与Swift相比,Objective-C的学习曲线极其陡峭,而且缺少Swift的大部分重要特性。我还记得苹果公司发布iPhone SDK时,我第一次尝试使用Objective-C,当时就被它吓到了,因为它和我之前接触过的任何编程语言都完全不同。

对于学习者来说,Objective-C和Swift几乎没有共同之处。没错,它们都能使用苹果的相同框架,但除非你打算去苹果公司工作——这是世界上唯一仍在大量编写Objective-C代码的公司——否则你就应该远离Objective-C,全身心专注于Swift。

不要贬低其他编程语言

我看到人们在学习Swift时犯的最后一个主要错误,是贬低其他编程语言,仿佛它们不如Swift优秀。通常被攻击的目标是JavaScript,但你也会看到有人批评Python、Java、Ruby、Go等语言,这样做有什么意义呢?这又不是一场比赛——其他语言不需要“失败”,Swift才能“成功”。

事实上,Swift和SwiftUI经常从其他语言和框架中汲取灵感——每当考虑添加新的语言特性时,社区都会参考Rust、Python、Haskell等其他语言中的类似实现;而SwiftUI本身也深受JavaScript中的React框架的启发。因此,当我看到我们社区中有人说SwiftUI“不含JavaScript”之类的话时,我真的很尴尬——事实远非如此。

课程与资源

现在来说说大多数人最关心的部分:到底有哪些资源可以帮助你学习Swift、SwiftUI等知识,从而实现成为iOS开发者的目标呢?

市面上的资源有很多,Swift社区中有很多人愿意分享自己的经验,这一点非常好。但在这里,我只推荐那些“免费”的资源——你可以在这些地方学习如何开发出色的应用,而且无需支付任何费用。

我只推荐免费资源,原因有两点:

  • 有些人认为Swift课程价格越高,质量就越好,因此他们会花大价钱购买课程,却没有从中获得足够的收益。
  • 像Udemy这样的平台,主要靠销售大量低价课程盈利。他们认为,即使你不喜欢某一门课程,也会购买另一门课程。而且他们的商业模式和Steam类似——常年有促销活动,诱使人们购买大量“总有一天会学”的课程。

因此,我在这里只列出免费资源,是为了避免你陷入上述陷阱——不要花一百多美元购买你的第一门课程,也不要因为觉得买了课程就能成为开发者,就一下子买十几门低价课程。

结构化教程

首先,苹果公司有两个重要的资源可以帮助你学习。第一个是它的“教学编程”网站,该网站列出了从Swift基础知识到专业认证的学生和教师资源。它的课程体系非常庞大,你可能需要花一点时间才能找到最适合自己的入门点,但一旦找到,你就会发现有很多内容可以探索。

第二个资源是苹果公司推出的一系列SwiftUI教程,这些教程会带你一步步开发真实的应用。但需要注意的是,这些教程并不教授Swift语言本身,因此你需要先学习苹果公司的Swift相关课程。

就像我之前提到的,苹果公司也为Swift编程语言专门编写了一份指南,但这份指南很可能不适合你——它是作为参考资料设计的,而非结构化教程,因此内容读起来比较晦涩难懂。

苹果公司的教程并没有提供结构化的学习路径,而我的免费教程正好可以弥补这一点。我有数百篇关于Swift、SwiftUI、UIKit等的文章和视频,但有两个资源我特别想推荐:《100天SwiftUI学习计划》(100 Days of SwiftUI)和《100天Swift学习计划》(100 Days of Swift)。

《100天SwiftUI学习计划》会通过文章、视频和交互式测试,带你学习Swift的基础知识,然后再带你使用SwiftUI开发超过20款真实应用——同样会提供文章、视频和交互式测试,帮助你巩固所学知识。每一个教程都建立在你之前所学内容的基础上,因此学习曲线会比较平缓。

如果你更想学习UIKit而不是SwiftUI,那么《100天Swift学习计划》会更适合你——它的理念类似,但采用UIKit而非SwiftUI,适合那些偏爱这种开发框架的人。

YouTube及其他平台资源

YouTube上有很多出色的视频,可以帮助你学习SwiftUI的基础知识,例如:

虽然其他一些平台的教程结构可能没有那么清晰,但它们也提供了高质量的Swift和SwiftUI教程,例如BLCKBIRDSRay Wenderlich唐尼·沃尔斯(Donny Wals)的网站安托万·范德李(Antoine van der Lee)的网站等——我非常建议大家多浏览一些资源,找到最适合自己的学习材料。

通过应用学习

如果你更喜欢通过应用学习,我推荐两款完全免费的应用。第一款是苹果公司的Swift Playgrounds应用,你可以在iPad或Mac上使用它学习Swift。这款应用中有很多面向儿童的交互式课程,但也有一些更高级的课程,可以帮助你进一步提升技能。

另一款是我自己开发的应用,名为Unwrap。Unwrap适用于所有iPhone和iPad设备,你可以通过视频、测试等方式学习、复习和练习Swift基础知识。它涵盖了Swift的所有基础内容,非常适合配合《100天SwiftUI学习计划》一起学习。

寻找问题答案

最后,你还需要学会在网上寻找问题的答案。这可能意味着要访问Stack Overflow,但说实话,我希望你不要去那里,因为那里的氛围通常不太友好。

相反,你可以在Hacking with Swift论坛、你喜欢的Slack群组、iOS开发者欢乐时光(iOS Dev Happy Hour)活动、Twitter等平台上提问——我们的社区真的非常热情友好,有很多人愿意帮助你实现目标。

融入社区

说到我们的社区,我想谈谈一个非常重要的话题——融入iOS开发社区。这不仅能帮助你结识志同道合的人,让你更高效地学习,还能帮助你找到工作机会,可谓是一举多得。

具体来说,融入社区意味着了解去哪里获取行业新闻和有趣的想法、去哪里结识同行并分享技巧,以及去哪里提问能获得帮助。

在Twitter上应该关注哪些人?

首先,最简单的方式是使用Twitter。Twitter是关注自己感兴趣内容的绝佳平台,在iOS开发领域,有几位人士我非常推荐大家关注。

本站使用 VitePress 制作