这是用户在 2024-9-23 19:04 为 https://www.hackingwithswift.com/articles/230/how-to-become-an-ios-developer 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?

GO FURTHER, FASTER: Try the Swift Career Accelerator today! >>
走得更远,速度更快:今天就尝试快速职业加速器! >>

How to Become an iOS Developer in 2021
如何在 2021 年成为 iOS 开发者

The skills, resources, and networking that will get you to your goal
实现目标的技能、资源和人际网络

Paul Hudson       @twostraws
保罗·哈德森@twostraws

In this article I want to walk you through what I think it takes to become an iOS developer in 2021. I’m aiming this squarely at two groups of people: absolute beginners to Swift – folks who have never built anything for iOS before – and also so-called false beginners, who are folks who might have tried to learn Swift before but never really reached their goal of getting a full-time job.
在本文中,我想带您了解我认为在 2021 年成为 iOS 开发者所需的条件。我将目标明确地针对两个群体:绝对初学者——那些从未为 iOS 构建过任何东西的人——以及所谓的假初学者,他们是曾经尝试学习 Swift 但从未真正实现全职工作的目标的人。

Regardless of what level you are right now, the goal here is the same: getting you in the right position to apply for a junior iOS developer role at a company.
无论你目前处于什么水平,目标都是一致的:让你处于合适的位置,以申请公司的一名初级 iOS 开发者职位。

We’re going to look at the skills you should be learning, the courses you can take, how to get connected to the community, common mistakes folks make, and more, and best of all everything I’ll talk about will be completely free so you won’t need a penny to follow along.
我们将关注你应该学习的技能、可以参加的课程、如何与社区建立联系、常见的错误,以及更多内容,最重要的是我所讨论的一切都是完全免费的,所以你不需要花一分钱来跟随。

Seriously, too many people think spending a ton of money is the fast track to reaching their dream job, when really the most important things are determination and willpower. And here’s a hint for you: if you’re already thinking you want to skip ahead in this article, maybe you should consider working on your willpower!
认真地说,太多人认为花很多钱是实现梦想工作的捷径,其实最重要的是决心和意志力。给你一个提示:如果你已经在考虑想跳过这篇文章,也许你应该考虑提高自己的意志力!

There are 7 sections to this article:
这篇文章分为 7 个部分:

  1. Core skills you absolutely need to know to get a job.
    你绝对需要了解的核心技能,以获得工作。
  2. Extension skills that are nice to have – the ones that will set you apart from the pack, if you have the time to learn them
    值得拥有的扩展技能——如果你有时间学习,它们将使你在竞争中脱颖而出
  3. Common mistakes people make when they are trying to learn.
    人们在学习时常犯的错误。
  4. Resources you can use to learn Swift that are completely free.
    您可以使用的完全免费的学习 Swift 的资源。
  5. How you can connect to the iOS development community.
    如何与 iOS 开发社区建立联系。
  6. An idea of how long it will take to reach your goal.
    达到目标大概需要多长时间的想法。
  7. Preparing to apply for your first job
    准备申请你的第一份工作
  • This article is also available as a video if you prefer. The content is the same, so use whichever is easiest for you.
    本文也可以作为视频观看,如果你更喜欢的话。内容是一样的,因此请使用对你来说最方便的方式。
Hacking with Swift is sponsored by Essential Developer.

SPONSORED Join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer! Hurry up because it'll be available only until September 29th.
赞助 参加一个免费的速成课程,适合想要获得专家级技术和实践技能的中级/高级 iOS 开发者——这是成为全面高级开发者的快速通道!赶快报名,因为该课程仅在 9 月 29 日前开放。

Click to save your spot
点击以保存您的位置

Sponsor Hacking with Swift and reach the world's largest Swift community!
赞助 Hacking with Swift,加入全球最大的 Swift 社区!

What are the core skills you need to be an iOS developer?
作为一名 iOS 开发者,你需要具备哪些核心技能?

What is the absolute minimum set of skills you need to get a job in iOS development? I think there are five things in total:
在 iOS 开发中,获得一份工作的绝对最低技能组合是什么?我认为总共有五个方面:

  1. Swift 迅速
  2. SwiftUI
  3. Working with data 处理数据
  4. Networking 网络连接
  5. Version control 版本控制

That’s it. And that list is super short intentionally, for a number of reasons:
就是这样。这个列表故意很短,原因有很多:

  1. The more you learn, the more you realize there is to learn, so it’s easy to spend so much time studying and practicing that you lose sight of the actual goal – you want to get a job as an iOS developer, not just sit around learning new stuff.
    你学得越多,就越意识到还有更多的东西可以学习,因此很容易花很多时间学习和练习,以至于失去了实际目标的视野——你想要得到一份 iOS 开发者的工作,而不仅仅是坐在那里学习新知识。
  2. It’s almost certain you’ll be joining a team that already has an existing app they want you to help develop, so unless you get extremely lucky they’ll need to teach you a whole lot of stuff regardless – if you try and cram a bunch of extra topics in beforehand there’s a good chance you’re wasting your time.
    几乎可以肯定你将加入一个已经有现有应用程序的团队,他们希望你帮助开发,因此除非你非常幸运,否则他们无论如何都需要教你很多东西—如果你提前想要填充许多额外的主题,很可能你是在浪费时间。
  3. Two of those five things are really big and really complex, and you can spend months just trying to wrap your head around them without venturing anywhere else.
    这五件事中有两件非常庞大和复杂,你可以花上几个月时间只是试图理解它们,而不去探索其他地方。
  4. But most importantly, if you get those five things right you can build a huge range of apps. Sure, your code won’t be perfect but that’s okay – the only way to write great code is to write a whole bunch of bad code first.
    但最重要的是,如果你把这五件事做对,你就可以构建各种各样的应用程序。当然,你的代码可能不会完美,但没关系——写出优秀代码的唯一方法就是先写一大堆糟糕的代码。

Let me break down the five things into smaller chunks.
让我把这五件事拆分成更小的部分。

Learning Swift 学习 Swift

First on the list of Swift. This is the core programming language from Apple – it has no concept of showing information on an iPhone’s screen, or downloading data from the internet, it’s just a language like JavaScript or Python. You use it to create variables, write functions, and so on; it’s just pure code.
首选 Swift。这是苹果公司的核心编程语言——它没有显示信息在 iPhone 屏幕上或从互联网下载数据的概念,它只是像 JavaScript 或 Python 一样的语言。你用它来创建变量、编写函数等等;它只是纯粹的代码。

Swift is only a few years old, which means it uses almost every cutting-edge language feature out there. On the one hand this means you get to avoid all the crusty old behaviors that are common in older languages like C++ and Java, but it does also mean it has quite a few more advanced features that might blow your mind at first. And that’s okay: lots of parts of Swift are relatively straightforward, and some parts will take you longer to really figure out, so just take your time and keep at it – you’ll get there!
Swift 只有几年的历史,这意味着它使用几乎所有最前沿的语言特性。一方面,这意味着你可以避免像 C++和 Java 等旧语言中常见的那些陈旧的行为,但这也意味着它有很多更高级的特性,刚开始可能会让你感到震惊。这没关系:Swift 的许多部分相对简单,而某些部分会让你花更长时间来真正理解,所以请慢慢来,继续努力——你会搞定的!

Learning SwiftUI 学习 SwiftUI

The second core skill I listed was SwiftUI, which is a framework from Apple that lets us write apps for iOS, macOS, tvOS, and even watchOS using Swift. So, while Swift is the programming language, SwiftUI provides the tools that makes apps – how to show pictures, text, buttons, text boxes, tables of data, and more. Just to be clear, SwiftUI isn’t somehow a replacement for Swift – it’s a framework built on top of Swift that lets us make apps, so you need both Swift and SwiftUI to succeed.
我列出的第二项核心技能是 SwiftUI,它是苹果公司提供的一个框架,让我们可以使用 Swift 为 iOS、macOS、tvOS,甚至 watchOS 编写应用程序。因此,虽然 Swift 是编程语言,但 SwiftUI 提供了制作应用程序的工具——如何显示图片、文本、按钮、文本框、数据表等。需要明确的是,SwiftUI 并不是 Swift 的替代品——它是建立在 Swift 之上的框架,让我们能够制作应用程序,因此成功需要同时掌握 Swift 和 SwiftUI。

If you thought Swift was new, you ain’t seen nothing yet – as I record this SwiftUI isn’t even two years old! But despite being so new, the iOS community has embraced it wholeheartedly because it’s just so awesome to work with.
如果你认为 Swift 是新的,那你还没见过真正的新事物——当我录制这个时,SwiftUI 甚至还不到两岁!但尽管如此年轻,iOS 社区已经全心全意地接受了它,因为它实在是太棒了。

Now, Apple has an older framework for building iOS apps called UIKit, and if you ask a bunch of folks whether you should learn SwiftUI first or UIKit first you’ll get a range of answers. In fact, there’s every chance that if you look in the comments for the YouTube video for this article you’ll find a bunch of folks telling me I don’t know what I’m talking about and that UIKit should be a priority.
现在,苹果有一个用于构建 iOS 应用的旧框架,称为 UIKit。如果你问一群人应该先学习 SwiftUI 还是 UIKit,你会得到各种各样的答案。实际上,如果你查看这篇文章对应的 YouTube 视频的评论,可能会发现一堆人告诉我我在说胡话,并且 UIKit 应该是优先考虑的。

So, in case you were curious here’s why I think you should focus on SwiftUI as a core skill:
所以,如果你感到好奇,我认为你应该将 SwiftUI 作为核心技能的原因如下:

  1. It is significantly easier than UIKit, and I mean significantly – it takes maybe a quarter of the code to get the same results that you would get in UIKit, plus you have fewer things to learn along the way. This means you get a lot of momentum because you build things faster, see your results faster, and iterate on those results faster, which is super motivating while you’re learning.
    它比 UIKit 简单得多,且我说的确实是 简单得多 – 只需大约四分之一的代码就能获得与 UIKit 中相同的效果,而且你需要学习的内容也更少。这意味着你可以获得更多的动力,因为你能更快地构建东西、更快地看到结果,并且更快地对这些结果进行迭代,这在学习过程中是非常激励的。
  2. SwiftUI was built for Swift, using language features to help you avoid problems and get maximum performance. For example, if you change some data on one screen of an app, SwiftUI will automatically make sure that new data is updated anywhere else in your app that uses it – you don’t need to write code to keep it all in sync yourself, which is surprisingly complex. In comparison, UIKit was written for Apple’s older language, Objective-C, and as a result has all sorts of quirks and cruft that came about as a result of its age.
    SwiftUI 是为 Swift 构建的,利用语言特性帮助你避免问题并获得最佳性能。例如,如果你在应用的一个屏幕上更改了一些数据,SwiftUI 会自动确保使用这些数据的应用其他地方也会更新——你不需要编写代码来自己保持同步,这实际上是相当复杂的。相比之下,UIKit 是为苹果的旧语言 Objective-C 编写的,因此存在各种因其年龄而产生的怪癖和多余的东西。
  3. SwiftUI works on all of Apple’s platforms, so you can take what you learned on iOS and use it to build a macOS or watchOS app with almost identical code. Sure, some things like the Digital Crown only exist on one device, but the vast majority of what you learn will work everywhere.
    SwiftUI 可在所有 Apple 平台上使用,因此您可以将您在 iOS 上学到的知识应用于构建 macOS 或 watchOS 应用,几乎使用相同的代码。确实,像数字表冠这样的东西仅存在于一台设备上,但您学到的大部分内容都可以在任何地方使用。
  4. But most importantly, SwiftUI is where things are going. If you were applying for a job right now – today – then fine you will probably need to know UIKit, but as you’re reading this article it means you’re much earlier in the process. Yes, UIKit is more popular now, but by the time you finish learning 6, 9, or even 12 months from now, SwiftUI will be the dominant UI framework.
    但最重要的是,SwiftUI 是未来的发展方向。如果你现在正在申请工作 – 今天 – 那么很好,你可能需要了解 UIKit,但当你阅读这篇文章时,意味着你还处于早期阶段。是的,UIKit 现在更受欢迎,但当你在接下来的 6、9 或者甚至 12 个月完成学习时,SwiftUI 将成为主导的 UI 框架。

Seriously, the world’s biggest companies are choosing SwiftUI, including Apple itself, and when Apple recently launched widgets in iOS 14 they made it a requirement that you must use SwiftUI – UIKit just isn’t possible there.
认真地说,全球最大的一些公司,包括苹果自己,都在选择 SwiftUI。当苹果最近在 iOS 14 中推出小部件时,他们将使用 SwiftUI 作为一项要求——在这里,UIKit 是不可能的。

Networking and data 网络和数据

The third and fourth skills I mentioned were networking and working with data. Compared to Swift and SwiftUI these are a piece of cake, or at least they are at the level you need to be in order to get a junior iOS developer job.
我提到的第三和第四项技能是网络和数据处理。与 Swift 和 SwiftUI 相比,这些要简单得多,或者说,它们的难度正好是你获得初级 iOS 开发者职位所需的水平。

Networking is the practice of fetching data from the internet, or sending data from the local device to a server somewhere. There are stacks and stacks of ways of doing this, but honestly the absolute least you need to know is how to fetch some JSON from a server.
网络是从互联网中获取数据或将数据从本地设备发送到某个服务器的实践。实现这个的方式有很多,但老实说,你需要知道的最基本的就是如何从服务器获取一些 JSON。

And that’s where the other core skill comes in: working with data. Again there’s a huge range of ways you can load and save data, but the absolute least you need to be able to do is convert that data you got from a server using your network code into some information your app can show.
这就是另一个核心技能的用武之地:处理数据。同样,你可以加载和保存数据的方法有很多种,但你需要能够做到的最基本的是将从服务器通过网络代码获取的数据转换为你的应用可以展示的一些信息。

So, really the third and fourth core skills go hand in hand: fetch some data from a server, then convert it into information you can show in your app. Some developers joke that this kind of code is half the job of iOS developers, and it’s certainly true that we use these skills a lot.
所以,实际上第三和第四项核心技能是密切相关的:从服务器获取一些数据,然后将其转换为可以在应用中展示的信息。一些开发者开玩笑说,这类代码占据了 iOS 开发者工作的一半,确实我们经常使用这些技能。

And finally: version control
最后:版本控制

The last skill isn’t coding at all: it’s version control, using something like Git. Again you really don’t need much here, but it’s important you’re able to publish your code somewhere like GitHub so recruiters are able to see your work publicly.
最后一项技能根本不是编码:而是版本控制,使用像 Git 这样的工具。同样,您在这方面并不需要太多,但能够将您的代码发布到像 GitHub 这样的地方非常重要,以便招聘人员能够公开看到您的作品。

I don’t think anyone in the world truly understands all of how Git works, but that’s okay – you just need to know enough of the basics to store your data safely, and to be able to work with others.
我认为世界上没有人真正理解 Git 的所有工作原理,但没关系——你只需要了解足够的基础知识,以安全存储数据,并能够与他人合作。

So, putting those five together there are two massive ones – Swift and SwiftUI – plus three small but important ones. Honestly, if you can just focus on those five things without getting distracted you’ll take massive strides towards your first iOS developer job.
所以,将这五个结合起来,有两个重要的——Swift 和 SwiftUI——以及三个小但重要的。老实说,如果你能专注于这五件事而不分心,你将大幅度向你的第一个 iOS 开发者职位迈进。

And that’s it: those are the five core skills I think you need to be an iOS developer. There are thousands of people out there who only have those skills, and are able to build and ship fantastic apps on the App Store.
这就是全部:我认为成为一名 iOS 开发者需要的五项核心技能。外面有成千上万的人只具备这些技能,能够在 App Store 上开发和发布出色的应用程序。

What next after the core skills?
核心技能之后接下来是什么?

Once you’ve really gotten to grips with the five core skills, you are absolutely 100% in a position to ship your own apps and work as an indie developer, and also in a position to apply for junior iOS development positions and work for a company should you want to. There are no other special qualifications you need – get those core skills down, and you’re in a good place.
一旦你真正掌握了五项核心技能,你就绝对有能力发布自己的应用程序,成为独立开发者,同时如果你愿意,也可以申请初级 iOS 开发职位并为公司工作。你不需要其他特别的资格——掌握这些核心技能,你就处于一个良好的状态。

But if you’ve worked your way through those skills and want to go further, then there are five extensions skills I would encourage you to learn. These are skills that will take you from your good place up to being in a fantastic place – you become even more employable, and the range of apps you’re able to build will grow even further.
但是如果你已经掌握了那些技能,并想要更进一步,那么我鼓励你学习五个扩展技能。这些技能将使你从一个良好的状态提升到一个精彩的状态——你会变得更加可雇佣,你能够构建的应用程序范围也会进一步扩大。

The skills are: 技能如下:

  1. UIKit
  2. Core Data 核心数据
  3. Testing 测试
  4. Software architecture 软件架构
  5. Multithreading 多线程

As before, I want to explain each of those in more detail so you can understand why I think they are important – and why I consider them extension skills rather than core skills.
和以前一样,我想更详细地解释这些内容,这样你就可以理解我为什么认为它们很重要——以及我为什么将它们视为 扩展 技能,而不是 核心 技能。

Moving on to UIKit 继续学习 UIKit

First, UIKit. This is Apple’s older user interface framework, and has been used for building apps since 2008 – it’s 13 years old as I write this, which in software terms is old. But that age doesn’t mean UIKit is bad, and in fact as you become comfortable with the way it works you’ll be surprised by how elegant it can be.
首先,UIKit。这是苹果公司较旧的用户界面框架,自 2008 年以来就用于构建应用程序——在我写这篇文章时,它已经 13 岁了,在软件术语中是的。但这个年龄并不意味着 UIKit 不好,事实上,随着你对它的工作方式变得熟悉,你会惊讶于它可以多么优雅。

There are lots of things that make UIKit worth learning, including:
有很多理由让 UIKit 值得学习,包括:

  • Hundreds of thousands of apps have already been written in UIKit, so if you’re joining a company with a large, well-established app you will almost certainly need to write UIKit code to maintain that app.
    数十万款应用程序已经使用 UIKit 编写,因此如果你加入了一个拥有大型、成熟应用的公司,几乎可以肯定你需要编写 UIKit 代码来维护该应用。
  • UIKit is significantly more powerful than SwiftUI – there are many things you can do in UIKit that aren’t possible in SwiftUI at this time.
    UIKit 比 SwiftUI 强大得多——在 UIKit 中可以做很多在当前 SwiftUI 中无法做到的事情。
  • You can create extraordinarily precise layouts using a technology called Auto Layout.
    您可以使用一种名为自动布局的技术创建极为精确的布局。
  • If you hit problems with your code, there are more solutions available in UIKit than SwiftUI, simply because it has been around much longer.
    如果您的代码遇到问题,UIKit 提供的解决方案比 SwiftUI 多,因为它存在的时间更长。

You might think all that makes UIKit sound great, so how come I made it an extension skill rather than a core skill? Well, because UIKit has problems too:
你可能会觉得这些使 UIKit 听起来很棒,那么为什么我把它做成了扩展技能而不是核心技能呢?嗯,因为 UIKit 也存在问题:

  • Almost everything is harder to do in UIKit than SwiftUI, with some things taking a hundred times as much code if not more. SwiftUI was made specifically for modern iOS development, so it does vast amounts of work for you.
    几乎所有事情在 UIKit 中都比在 SwiftUI 中更难做,有些事情需要的代码量是 SwiftUI 的百倍甚至更多。SwiftUI 是专门为现代 iOS 开发而设计的,因此它为你完成了大量的工作。
  • Because UIKit wasn’t written for Swift, you’ll find it has many features that you can forget about with SwiftUI – lots of implicitly unwrapped optionals, marking code with a special @objc attribute to make it available to UIKit’s Objective-C underbelly, needing to use protocols and delegates to show simple data.
    由于 UIKit 并不是为 Swift 编写的,因此您会发现它有许多特性是您可以在 SwiftUI 中忽略的——大量隐式解包选项,使用特殊的 @objc 属性标记代码以使其可用于 UIKit 的 Objective-C 底层,需要使用协议和委托来显示简单数据。
  • Nothing about Auto Layout is “auto” – in fact, if you ever do try to build a complex layout there’s a good chance you might have nightmares about Auto Layout. It’s extremely clever, but it’s also extremely hard in places.
    关于自动布局,什么都不是“自动”的——事实上,如果你真的尝试构建一个复杂的布局,你可能会对自动布局产生噩梦。它非常聪明,但在某些地方也极其困难。

And that’s why I consider UIKit to be an extension skill: it takes significantly more time and effort to learn compared to SwiftUI, which in turn means it takes a great deal more determination – you’ve got to really want to learn it, otherwise you’ll get confused, bored, angry, or potentially all three. Sure, SwiftUI doesn’t have all the features of UIKit, but at least you can make quick progress and feel a sense of momentum and success before you move on to UIKit.
因此,我认为 UIKit 是一项扩展技能:与 SwiftUI 相比,学习它需要投入更多的时间和精力,这意味着你需要有很强的决心——你必须真的想要学习它,否则你会感到困惑、无聊、愤怒,或者可能三者都有。当然,SwiftUI 并没有 UIKit 的所有功能,但至少你可以快速取得进展,并在继续学习 UIKit 之前感受到一种动力和成功感。

Tackling Core Data 处理核心数据

The second extension skill I mentioned is Core Data, which is Apple’s framework for working with application data. In the core skills section I listed both networking and working with data, and it’s true: with those skills in place you can fetch whatever you want from a server and show it in your app. What Core Data does is go a step further: it allows you to manipulate that data once you have it, for example searching for particular values, sorting the results, and more, all very efficiently. It can also link up very easily to iCloud, meaning that your user’s data gets synchronized across all their devices.
我提到的第二个扩展技能是核心数据,这是苹果用于处理应用程序数据的框架。在核心技能部分,我列出了网络和数据处理,确实如此:掌握这些技能后,你可以从服务器获取任何你想要的内容并在应用中显示。核心数据更进一步:一旦你拥有数据,它可以让你操纵这些数据,例如搜索特定值、对结果排序等,所有这些都非常高效。它还可以与 iCloud 非常容易地连接,这意味着用户的数据会在他们的所有设备之间同步。

Core Data has a whole bunch of downsides, with the biggest one being that often it just isn’t very pleasant to work with. Core Data is about as old as UIKit, and although it worked great with Objective-C it does not feel as comfortable in Swift. It does have good integration with SwiftUI, which makes it feel a bit less strange, but it’s still a surprisingly complex topic.
Core Data 有很多缺点,最大的一个是它在使用时往往不太愉快。Core Data 和 UIKit 差不多同龄,虽然它在 Objective-C 中运作良好,但在 Swift 中它 并不 感觉那么舒适。它 确实 与 SwiftUI 有良好的集成,使其感觉不那么奇怪,但这仍然是一个令人惊讶的复杂话题。

So, why have I listed it as an extension skill? Because like UIKit, Core Data is also extremely popular – hundreds of thousands of apps have been built using it, and it’s used in many companies large and small. Also like UIKit, Core Data is really powerful, and although you could recreate the most important parts of it in your own code, why would you want to?
所以,为什么我把它列为扩展技能?因为像 UIKit 一样,Core Data 也非常受欢迎——数以万计的应用程序是使用它构建的,并且它被许多大小公司使用。同样像 UIKit 一样,Core Data 真的很强大,尽管你可以在自己的代码中重建它最重要的部分,但你为什么要这么做呢?

Proving your code works 证明您的代码有效

The third skill on my extension list is testing: writing special code that tests your main app code works the way you expect. Tests allow us to be sure our code works correctly, and more importantly allows us to continue to be sure it works correctly even after we’ve made significant changes to it – if you change 500 lines of code to implement a new feature and all your tests pass, you’re good to go.
我扩展列表中的第三个技能是测试:编写特殊代码来测试您的主应用程序代码是否按预期工作。测试可以确保我们的代码正确运行,更重要的是,即使在我们进行了重大更改之后,它也能让我们继续确保代码运行正确——如果您更改了 500 行代码以实现一个新功能并且所有测试都通过,那么您就可以继续了。

So, testing is important, and will help you write better quality software. Why, then, is it an extension skill rather than a core skill? There are three reasons:
测试很重要,它将帮助您编写更高质量的软件。那么,为什么它是一项扩展技能而不是核心技能呢?有三个原因:

  1. For whatever historical reasons, the iOS community as a whole is terrible at testing. I mean really, really bad – many huge apps have hardly any tests at all, and I’ve lost track of how many senior iOS developers I met who are almost proud they never write tests. No, I don’t understand it either.
    出于某些历史原因,整个 iOS 社区在测试方面做得非常糟糕。我是说,真的非常糟糕——许多大型应用几乎没有任何测试,而我已经忘记我遇到过多少位资深 iOS 开发者,他们几乎为自己从不编写测试而感到骄傲。不,我也不理解这一点。
  2. When you think about all the remarkable things you can build with Apple’s tools and frameworks, honestly it just doesn’t seem much fun writing tests in comparison. I personally enjoy writing tests in much the same way I enjoy flossing my teeth, but I know many people just don’t find them exciting, particularly on personal projects.
    当你想到使用苹果的工具和框架可以构建的所有出色事物时,说实话,与之相比,编写测试似乎就没那么有趣了。我个人喜欢编写测试,就像我喜欢用牙线一样,但我知道许多人根本不觉得它们有趣,尤其是在个人项目上。
  3. When you’re applying for a job, having knowledge of Swift and Apple’s major frameworks will always be more beneficial than knowledge about writing tests. Companies would much rather you knew how to use SwiftUI, UIKit, or one of the other big hitters, because in comparison testing as a topic is significantly smaller – there aren’t nearly as many things to learn.
    当你申请工作时,掌握 Swift 和苹果的主要框架总是比了解编写测试更有利。公司更希望你会使用 SwiftUI、UIKit 或其他主要框架,因为相比之下,测试作为一个主题显得小得多——可学习的内容少得多。

So, testing is important, testing matters, and I would love for you to learn how to write great tests. But do it after you’ve grasped the basics of building apps – get some success under your belt, feel the sheer excitement of having your app live on the App Store, then get to grips with testing.
所以,测试很重要,测试很关键,我希望你学会如何编写优秀的测试。但在你掌握构建应用程序的基础知识 之后,先取得一些成功,感受一下你的应用程序在 App Store 上上线的激动心情,然后再深入了解测试。

Building smarter 建设更智能的建筑

The fourth extension skill I want to talk about is software architecture, which really is about the way we craft our code. When you’re just learning you’re going to write some terrible code – code so bad it probably breaks the Geneva convention. And that’s okay, because that’s how you learn: you don’t start good – you get good by being bad for a long time, just as LeBron James wasn’t born a champion basketball player.
我想谈谈的第四个扩展技能是软件架构,这实际上是关于我们编写代码的方式。当你刚开始学习时,你会写一些很糟糕的代码——糟糕到可能违反日内瓦公约的代码。这没关系,因为这就是你的学习方式:你不是一开始就好——你通过长时间的变好,就像勒布朗·詹姆斯并不是天生的冠军篮球运动员。

The point is that you persevere with your bad code, until you learn to do better. And that’s where software architecture comes in: looking at proven techniques for structuring your code to make it easier to read, easier to use, easier to modify, and easier to take care of in the longer term. Sometimes these techniques rely on the way Swift works – language features you can use to write better code. But there are many more techniques that work in any programming language, and we usually call these design patterns.
关键在于你坚持使用坏代码,直到你学会写得更好。这就是软件架构的用武之地:借助经过验证的技术来构造你的代码,使其更容易阅读、更易使用、更易修改,并在长期内更易维护。有时这些技术依赖于 Swift 的工作方式——你可以用来编写更好代码的语言特性。但还有许多其他技术适用于任何编程语言,我们通常称这些为 设计模式

One major point you should start to learn about as part of this skill is how you break up your code. For example, if you’re building one screen in your app you might have a login button, an image gallery, and a list of friends all on that screen. But ideally you make each of those parts separate components – a login button component, an image gallery component, and a friends list component – so you can re-use any of those components in other parts of your app.
你应该开始学习的一个重要点是如何拆分你的代码。例如,如果你在应用程序中构建一个屏幕,你可能会在该屏幕上有一个登录按钮、一个图片画廊和一个朋友列表。但理想情况下,你应该将每个部分做成单独的组件——一个登录按钮组件、一个图片画廊组件和一个朋友列表组件——这样你就可以在应用程序的其他部分重用任何这些组件。

Software architecture is much more subjective than the other skills I’ve mentioned so far. For the others – for example, SwiftUI – you can think to yourself, “well, I know how to do X, Y, and Z, so I feel confident I’m a good SwiftUI developer.” Software architecture is a very broad topic and honestly a lot of the time there is no obvious “right” way to solve a problem, so I think the best benchmark for it is this: if you look back on your code from six months ago, or a year ago, or three years ago, etc, do you think “wow, that code is bad!”
软件架构比我提到的其他技能更主观。对于其他技能——例如,SwiftUI——你可能会想,“好吧,我知道如何做 X、Y 和 Z,所以我对自己是个优秀的 SwiftUI 开发者充满信心。”软件架构是一个非常广泛的主题,老实说,很多时候没有明显的“正确”解决方案,所以我认为最好的基准是:如果你回顾自己六个月前、一年前或三年前的代码,等等,你是否会想:“哇,那段代码真糟糕!”

Again, writing bad code is okay as long as it’s putting you on the path to writing better code. I certainly look back on code I wrote five years ago and grimace in places, because I know more now than I did back then – and that’s a good thing.
再写坏代码是可以的,只要它能让你走上写更好代码的道路。我当然会回顾自己五年前写的代码,在某些地方不禁皱眉,因为我现在知道的比当时更多——这是一件好事。

Adding some concurrency 添加一些并发性

The final extension skill I want to talk about is multithreading, which in simple terms is the practice of making your code do more than one thing at a time. Multithreading can be a real headache, because it’s hard for our brains to understand – when your code does one thing at a time we can think it through linearly, but when two or three things happen at the same time, potentially overlapping each other, it can really bend your brain.
我想要谈论的最后一个扩展技能是多线程,简单来说就是让你的代码同时做多件事情的实践。多线程可能会让人感到头疼,因为我们的大脑很难理解——当你的代码一次只做一件事时,我们可以线性地思考,但当两三件事情同时发生时,可能会相互重叠,这真的会让你感到困惑。

So, although multithreading is a great thing to have as an extension skill, you need to be careful – your goal ought to be to understand just enough of the concepts and code to make it work well, without going a great deal further. Honestly, a lot of developers think multithreading will make their code run three or four times faster immediately, and in some cases it will, but it many other cases your code will actually run slower, and now you have all the additional code complexity to deal with.
所以,尽管多线程作为一个扩展技能是非常重要的,但你需要小心——你的目标应该是理解足够的概念和代码,使其运作良好,而不必深入。此外,很多开发者认为多线程会立即让他们的代码运行快三到四倍,在某些情况下确实会,但在许多其他情况下,你的代码实际上会运行得更慢,现在你还需要处理所有额外的代码复杂性。

If you don’t believe me, check out this quote from David Smith – he’s one of the Swift team at Apple, and previously spent years working on the very core of Apple’s frameworks:
如果你不相信我,可以看看戴维·史密斯的这句话——他是苹果 Swift 团队的一员,之前在苹果的框架核心工作了多年:

My concrete recommendation is: you should really strongly consider not writing async/concurrent code. I know this sounds weird in 2018, but the cost in complexity and performance is high.
我具体的建议是:你真的应该认真考虑不要编写异步/并发代码。我知道在 2018 年这听起来很奇怪,但复杂性性能的成本是很高的。

So: learn a little of how multithreading works in Swift just so you can see you understand the concepts and implementation, but try not to go overboard!
所以:学习一些 Swift 中多线程的工作原理,以便你能理解这些概念和实现,但尽量不要过于深入!

Common mistakes 常见错误

At this point I’ve outlined all the core and extension skills I think you need in order to work as a full-time iOS developer. But I also want to talk about some of the most common mistakes folks make while learning, because I see these a lot and I know it sets people back.
在这一点上,我已经概述了我认为你作为全职 iOS 开发者所需的所有核心和扩展技能。但我也想谈谈人们在学习过程中常犯的一些错误,因为我看到这些错误很多,我知道这会让人们退步。

Just to give you an idea, my site teaching folks Swift has over 700,000 unique visitors every month, serving up over 5,000,000 page views, so I feel pretty comfortable in saying I know the common mistakes folks hit.
为了让你有个概念,我的网站教授人们 Swift,每个月有超过 700,000 个独立访客,页面浏览量超过 5,000,000,所以我可以自信地说我了解人们常犯的错误。

There are seven main problems folks hit, and I want to cover them in order. They are:
人们常遇到七个主要问题,我想按顺序逐一讨论它们。它们是:

  1. Memorizing everything 记住一切
  2. Shiny object syndrome 闪亮物体综合症
  3. Lone wolf learning 独狼学习
  4. Using beta software 使用测试版软件
  5. Relying on Apple’s documentation
    依赖于苹果的文档
  6. Getting lost in Objective-C
    迷失在 Objective-C 中
  7. Taking shots at other languages
    对其他语言的批评

Let’s walk through each of those individually.
让我们逐个来看看。

Stop trying to memorize things
停止试着去记忆东西

The first and by far the most common problem folks hit is trying to memorize everything – reading through a tutorial and thinking they must remember everything in there by heart. Please, please, please don’t do that: it’s a recipe for disaster, and will suck all your willpower out of you until you never want to program again.
人们遇到的第一个也是最常见的问题是试图记住所有内容——阅读教程时想着必须记住里面的所有内容。请,请,千万不要这样做:这简直是个灾难的方程式,会消耗你所有的意志力,直到你再也不想编程。

No one memorizes everything. No one even comes close to memorizing everything. Even if you just think about the APIs Apple publishes, which are the pieces of code we can use to build our apps, there must be well over a hundred thousand out there. If you restricted that just to the core components of app building, you’re still probably looking at several hundred – all working in a very precise way that requires a lot of learning to utilize.
没有人能记住所有的东西。甚至没有人能 接近 记住所有的东西。即使你只是考虑一下苹果发布的 API,这些是我们用来构建应用程序的代码片段,市面上肯定有超过十万个。如果你把范围限制在应用构建的核心组件上,仍然可能会有几百个——它们都以非常精确的方式工作,需要大量学习才能使用。

Instead, what happens is that you learn how to do something new, then promptly forget it. So you look it up and use it again, then promptly forget it. So you look it up a third time and use it, and this time you only mostly forget it – some parts stick in your brain. This repeats again and again, each time with you having to refer to a tutorial or some other reference guide, until eventually the really core things have stuck in your head to the point where you can do it without referring elsewhere.
相反,发生的情况是你学习如何做一些新的事情,然后迅速忘记它。所以你查找它并再次使用,然后很快又忘记了。所以你第三次查找并使用这项技能,这次你只会大多数忘记——有些部分留在了你的脑海里。这一过程不断重复,每次你都必须参考教程或其他参考指南,直到最终真正核心的知识深深印在你的脑海中,以至于你能够在不参考其他地方的情况下完成它。

If you weren’t already aware, forgetting is a key component of learning. Each time you forget something and relearn it, it goes into your brain a bit deeper and a bit more thoroughly. Each time you relearn, your brain makes new connections with other things you learned, helping you understand more about the context of what you’re trying to do. And each time you relearn, you’re making it clear to your brain that this particular topic is worth stashing away in its long-term memory.
如果你还不知道,遗忘是学习的一个关键组成部分。每当你忘记某件事并重新学习时,它就会在你的大脑中更深、更彻底地存储。每次你重新学习时,你的大脑会与你学习过的其他事物建立新的联系,帮助你更好地理解你所要做的事情的背景。而每次你重新学习时,你都在向大脑表明这个特定主题值得存储在长期记忆中。

But if you set out trying to memorize everything, you’re going to have a hard time. Instead, don’t worry about forgetting things: knowing where to look them up is much more important than memorizing the specific Swift code to accomplish something. When you forget something and have to relearn it, I encourage you to think of that as a good thing – that information will sink in deeper the second, third, and tenth time you learn it, so you’re doing your brain a favor.
但是如果你设定目标,试图记住一切,你会很困难。相反,不要担心忘记事情:知道在哪里查找比记住具体的 Swift 代码来完成某个任务要重要得多。当你忘记某件事并且需要重新学习时,我鼓励你把它看作是一件事——那条信息在你第二次、第三次和第十次学习时会更深入地印入脑海,所以你是在帮助你的大脑。

Skip the shiny 跳过光鲜的表面

The second most problem I see folks hit is what I call shiny object syndrome – they find a tutorial series that works well for them and start making some progress, but after a week or two of that they see some other tutorial series they want to follow and jump ship to that instead. I’ve had folks email me saying they’ve tried four, five, or even six different series and are – for some weird reason – finding they aren’t learning anything.
我看到的第二个问题是我称之为闪亮物体综合症——他们找到一个对他们有效的教程系列,开始取得一些进展,但在一两周后,他们看到其他想要跟随的教程系列,然后转而去学习那个。我曾有朋友给我发邮件,说他们尝试了四、五甚至个不同的系列,但出于某种奇怪的原因,他们发现自己什么也没学到。

The problem here usually is that large parts of learning anything aren’t exciting. That’s not the fault of the teacher necessarily, it’s just a fact of learning to code – some things give you great results with hardly any work, and other things take a lot more time to understand, don’t yield fancy results, or are just one part of a larger concept.
这里的问题通常是,学习任何东西的大部分内容并不令人兴奋。这并不一定是教师的错,这只是学习编码的一个事实——有些东西几乎不费力气就能获得很好的结果,而其他东西则需要花费更多时间去理解,不会产生华丽的结果,或者只是更大概念的一部分。

When you hit these steep learning curves, shiny object syndrome becomes powerful – with so many free tutorials out there you can jump ship to any one of them and start again, and you’ll immediately be back in the shallow part of the pool again, covering easier parts you’ve already learned. But unless the original course chose a particularly weird topic to cover, you’re probably going to have to learn it eventually and you’re just kind of delaying the inevitable.
当你遇到这些陡峭的学习曲线时,吸引新事物的症状变得强大——有这么多免费的教程,你可以随时跳转到其中任何一个,重新开始,而你会立即回到浅水区,复习你已经学过的简单内容。但除非原课程选择了一个特别奇怪的话题,否则你最终可能还得学习它,而你只是在拖延不可避免的结果。

So, I’m not asking you always to resist shiny object syndrome, because I know it’s hard. Instead, at least be conscious of it: when you hit a problem, try asking someone else for help and powering through rather than switching.
所以,我并不是让你总是抵制闪亮物体综合征,因为我知道这很难。相反,至少要对此有所意识:当你遇到问题时,试着向其他人寻求帮助并坚持下去,而不是切换。

Don’t be a lone wolf
不要做孤狼

Speaking of asking someone else, the third problem I see folks hit is when they go all lone wolf with their learning – they have it in their head that they are fully capable of learning to build iOS apps using Swift all by themselves, and don’t need the help of others.
谈到向其他人请教,我看到的第三个问题是,很多人独自学习——他们心里认为自己完全有能力独自学习使用 Swift 构建 iOS 应用,不需要别人的帮助。

This approach does work for a very small number of people, usually the ones who have extensive experience with other programming languages or platforms. But for the overwhelming majority of people, trying to learn like this is a horrible experience – every mistake or misunderstanding takes five times as long to figure out, it’s extremely easy to lose motivation, and you’re missing out on a whole lot of inspiration from seeing others succeed.
这种方法确实对少数人有效,通常是那些在其他编程语言或平台上拥有丰富经验的人。但对于绝大多数人来说,这样学习是非常糟糕的体验——每一个错误或误解都需要五倍的时间来解决,失去动力极其容易,而且你错过了看到他人成功所带来的大量灵感。

If you’re naturally into this “lone wolf” style of learning, let me encourage you to change: share what you’re learning, find others who are learning too, and get into the habit of asking questions. Not only will you discover there’s a fantastic community of learners who will surround you with support and encouragement, but you’ll also be inspired by their work and in turn inspire them with your work. Trust me, I’ve seen this happen hundreds of times and it is utterly transformative.
如果你天生喜欢这种“孤狼”式的学习方式,我鼓励你改变一下:分享你所学的内容,寻找其他正在学习的人,并养成提问的习惯。你不仅会发现有一个支持和鼓励你的优秀学习者社区,还会受到他们工作的启发,反过来用你的工作去激励他们。相信我,我见过这种情况发生过数百次,真的会改变一切。

Going for the beta 去体验测试版

The fourth big problem I see folks hit is when they insist on using beta versions of Apple’s development tools. I get it: every year Apple introduces a new iOS, a new macOS, and more, always delivering exciting new things for us to try. It is totally natural for folks to want to learn the latest, greatest that’s out there, particularly if they know that Swift has a long history of change.
我看到的第四个大问题是,人们坚持使用苹果开发工具的测试版。我明白:每年苹果都会推出新的 iOS、新的 macOS 等,总是提供令人兴奋的新事物供我们尝试。人们想学习最新、最好的东西是非常自然的,特别是他们知道 Swift 有着悠久的变革历史。

However, folks get into all sorts of problems when they try to learn with beta software:
然而,人们在尝试使用测试版软件学习时会遇到各种问题:

  • Tutorials haven’t been updated for the beta version, so following their instructions won’t always be possible or might not work correctly.
    教程尚未针对测试版更新,因此按照他们的说明操作并不总是可行,或者可能无法正确运行。
  • Betas usually have bugs galore, particularly so for the ones released for major iOS updates.
    测试版本通常存在大量错误,特别是那些针对重大 iOS 更新发布的版本。
  • Apple’s beta frameworks take time to stabilize, meaning that code working in beta 1 might not exist in beta 3.
    苹果的测试版框架需要时间来稳定,这意味着在测试版 1 中有效的代码可能在测试版 3 中不存在。

So, I know it’s exciting to learn new stuff, and I realize you might think you’re getting ahead of the game with new features, but trust me: it isn’t worth it. Always stick to the latest public releases of Apple’s developer tools, at least until you’re feeling comfortable with them.
所以,我知道学习新知识是令人兴奋的,我意识到你可能认为通过新功能获得了先机,但相信我:这不值得。始终坚持使用苹果开发者工具的最新公开版本,至少在你对它们感到舒适之前。

Relying on the official docs
依赖官方文档

The fifth big problem folks hit when trying to learn is relying on Apple’s documentation. Apple’s developer publications team works hard to document as much as they can from the company’s huge range of frameworks, but their job for the most part is to write reference material – things you read when you’re trying to use a particular piece of their tools, rather than creating a structured course to help you learn to build iOS apps.
人们在学习时遇到的第五个大问题是依赖苹果的文档。苹果的开发者出版团队努力记录公司众多框架中的尽可能多的内容,但他们大部分的工作是编写参考材料——你在尝试使用他们的某个工具时阅读的内容,而不是创建一个结构化的课程来帮助你学习构建 iOS 应用程序。

I’ve lost track of how many times folks have asked “how can I learn Swift?” only to be answered “just read Apple’s Swift reference guide.” This approach does work for some people, and I know that because it worked for me – I read it cover to cover when Swift was first announced. However, for most people it’s a bit like trying to learn a human language by reading a dictionary: it’s designed to cover everything in the language, rather than teach you the most important parts and how to apply them.
我已经不记得有多少次人们问“我该如何学习 Swift?”然后得到的回答是“只需阅读苹果的 Swift 参考指南。”这种方法对某些人有效,我知道因为我就是其中之一——当 Swift 首次发布时,我从头到尾读了一遍。然而,对于大多数人来说,这就像试图通过阅读字典来学习一门人类语言:它旨在涵盖该语言的所有内容,而不是教授你最重要的部分以及如何应用它们。

So, if you have extensive experience with other languages you might find reading Apple’s reference guides to be useful, but if you’re just starting out then maybe come back to them after a few months.
所以,如果你对其他语言有丰富的经验,你可能会发现阅读苹果的参考指南很有用,但如果你刚刚开始学习,那可能过几个月再回来看它们。

Getting lost in Objective-C
迷失在 Objective-C 中

The sixth big problem folks hit is trying to learn Objective-C. This was Apple’s primary development language before Swift was introduced, and although you’ll find remnants in some old codebases the overwhelming majority of existing code is now Swift, and almost all new code is also Swift.
第六个大家遇到的大问题是试图学习 Objective-C。这是苹果在引入 Swift 之前的主要开发语言,尽管在一些旧代码库中你会发现残留的部分,但现有代码的绝大多数现在是 Swift,几乎所有 代码也是 Swift。

I spent years writing Objective-C before Swift came along and really grew to love it, but it has an extremely steep learning curve compared to Swift and misses out on most of Swift’s important features. I remember when I first tried out the iPhone SDK when Apple announced it, and being horrified by Objective-C because it was entirely unlike anything else I had seen so far.
我花了多年时间编写 Objective-C,直到 Swift 出现并让我真正喜欢上它,但与 Swift 相比,它的学习曲线非常陡峭,并且缺少大部分 Swift 的重要功能。我记得当苹果公司宣布 iPhone SDK 时,我第一次尝试它,对 Objective-C 感到惊恐,因为它完全与我之前见过的任何东西都不一样。

For a learner, Objective-C and Swift have almost nothing in common. Yes, they both share the same frameworks from Apple, but unless you’re actually planning to work at Apple – the only company in the world still producing large amounts of Objective-C – then you should leave Objective-C well alone and focus entirely on Swift.
对于学习者来说,Objective-C 和 Swift 几乎没有任何共同点。是的,它们都共享来自苹果的相同框架,但除非你确实打算在 苹果 工作——这是世界上唯一仍在大量生产 Objective-C 的公司——否则你应该完全放弃 Objective-C,专注于 Swift。

Taking shots at other languages
对其他语言的批评

And the final major mistake I see folks make when learning Swift is to dump on other languages as if they were somehow inferior to Swift. The usual target is JavaScript, but you’ll also see folks take shots at Python, Java, Ruby, Go, and more, and for what? It’s not a competition, folks – those languages don’t have to lose in order for Swift to win.
我看到人们在学习 Swift 时犯的最后一个重大错误就是贬低其他语言,好像它们比 Swift 低劣一样。通常的攻击目标是 JavaScript,但你也会看到有人对 Python、Java、Ruby、Go 等进行抨击,究竟为了什么呢?这不是一场竞争,大家——这些语言不需要失败,Swift 才可以获胜。

In fact, Swift and SwiftUI regularly take inspiration from other languages and frameworks – whenever new language features are considered the community looks at similar implementations in Rust, Python, Haskell, and other languages, and SwiftUI itself is hugely inspired by the React framework in JavaScript. So, when I see folks in our community say SwiftUI is JavaScript-free or similar, I just cringe – nothing could be further from the truth.
实际上,Swift 和 SwiftUI 经常从其他语言和框架中汲取灵感——每当考虑到新的语言特性时,社区都会查看 Rust、Python、Haskell 和其他语言中的类似实现,而 SwiftUI 本身深受 JavaScript 的 React 框架的启发。因此,当我看到我们社区的朋友们说 SwiftUI 是无 JavaScript 的或类似的说法时,我只能感到不适——事实恰恰相反。

Courses and resources 课程和资源

Now for the part most people will care most about: what are the actual resources I think you should use to learn Swift, SwiftUI, and more – to reach your goal of being an iOS developer?
现在大多数人最关心的部分来了:我认为你应该使用哪些实际资源来学习 Swift、SwiftUI 等,以实现成为 iOS 开发者的目标?

There are lots out there, and I really appreciate the fact that the Swift community has such a broad range of people sharing their experience. However, here I’m specifically going to look at resources that are free – places where you can go and learn to build fantastic apps without paying a cent.
有很多资源,我非常感激 Swift 社区有如此广泛的人共享他们的经验。然而,在这里我将特别关注那些免费的资源——你可以去的地方,学习如何构建出色的应用程序而无需花费一分钱。

There are two reasons for this:
有两个原因:

  • Some folks believe that the more a Swift course costs the better it must be, so they end up paying eye-watering prices without getting enough benefit from it.
    有些人认为,Swift 课程的价格越高,质量就越好,因此他们最终支付了高得惊人的价格,却没有从中获得足够的好处。
  • Many sites like Udemy rely on selling lots of low-priced courses, confident that if you don’t like one course you’ll just buy a different one. They also have a business model similar to Steam’s – there are sales running all the time, encouraging folks to build up lots of courses they’ll study “one day”.
    许多像 Udemy 这样的网站依赖于销售大量低价课程,确信如果你不喜欢一门课程,你会去买其他课程。他们的商业模式也类似于 Steam 的——随时都有打折促销,鼓励人们积累许多他们“总有一天”会学习的课程。

So, I’m only listing free resources here because I don’t want you to fall into those traps – don’t splash out a hundred bucks or more for your first course, and don’t buy a dozen cheap courses because you think that makes you a developer.
所以,我这里只列出免费的资源,因为我不想让你陷入那些陷阱——不要为你的第一门课程花一百美元或更多,也不要买一堆便宜的课程,因为你认为那会使你成为一个开发者。

Structured tutorials 结构化教程

First, Apple has two major resources that can help you. The first is its Teaching Code site, which lists student and teacher resources for learning Swift from the absolute basics up to professional certifications. Their curriculum is massive, so it might take you a little while to find the best entry point for you, however once you’re there you’ll find lot of things to explore.
首先,苹果公司有两个主要资源可以帮助你。第一个是它的 教学代码网站,该网站列出了学生和教师用于学习 Swift 的资源,从基础知识到专业认证应有尽有。他们的课程内容丰富,因此你可能需要一些时间来找到最适合你的入门点,但一旦你找到了,就会发现有很多东西可以探索。

And second, Apple has a series of SwiftUI tutorials that walk you through building real apps. These do not teach you Swift, though, so you’ll need to follow their Swift-focused curriculum first.
而且,苹果有一系列的 SwiftUI 教程,可以指导你构建真实的应用程序。不过,这些并 教你 Swift,因此你需要先按照他们针对 Swift 的课程学习。

Like I said earlier, Apple also makes a guide specifically for the Swift programming language, but there’s a very good chance it won’t work for you – it’s designed as a reference rather than a structured tutorial, so it’s quite dense reading.
正如我之前所说,苹果也为 Swift 编程语言制作了一本指南,但很有可能它不适合你——它被设计为参考资料,而不是结构化的教程,因此阅读起来相当密集。

What Apple’s tutorials don’t do is try to provide a structured way to learn, and that’s where my own free tutorials come in. I have hundreds of articles and videos about Swift, SwiftUI, UIKit, and more, but there are two in particular I want to recommend: the 100 Days of SwiftUI, and the 100 Days of Swift.
苹果的教程并不提供一种结构化的学习方式,这正是我自己的免费教程的用武之地。我有关于 Swift、SwiftUI、UIKit 等的数百篇文章和视频,但我特别想推荐两个:100 天的 SwiftUI 和 100 天的 Swift。

The 100 Days of SwiftUI course takes you through learning the fundamentals of Swift using articles, videos, and interactive tests, then walks you through building over 20 real-world apps using SwiftUI – again all with articles, videos, and interactive tests to help make sure what you’re learning is sinking in. Each tutorial builds on what you already learned, so the learning curve is nice and gradual.
100 天 SwiftUI 课程将带您学习 Swift 的基础知识,使用文章、视频和互动测试,然后引导您使用 SwiftUI 构建 20 多个实际应用程序——同样通过文章、视频和互动测试来确保您学习的内容得以消化。每个教程都是在您已经学过的基础上进行的,因此学习曲线平滑而渐进。

If you’d rather learn UIKit rather than SwiftUI, that’s where the original 100 Days of Swift comes in – it’s a similar idea, but built using UIKit rather than SwiftUI for folks who prefer that path.
如果您更愿意学习 UIKit 而不是 SwiftUI,那么原版的“100 天的 Swift”就是为此而来——它的想法类似,但使用的是 UIKit 而不是 SwiftUI,适合喜欢这条路径的人。

YouTube and more YouTube 和更多

There are some fantastic YouTube videos walking you through the fundamentals of SwiftUI, including:
有一些精彩的 YouTube 视频带你了解 SwiftUI 的基础知识,包括:

Although they aren’t quite so structured, there are other sites that have high-quality Swift and SwiftUI tutorials, including BLCKBIRDS, Ray Wenderlich, Donny Wals, Antoine van der Lee, and more – I really encourage folks to visit a range of resources and find what works for them.
虽然它们没有那么结构化,但还有其他提供高质量 Swift 和 SwiftUI 教程的网站,包括BLCKBIRDSRay WenderlichDonny WalsAntoine van der Lee等 – 我非常鼓励大家访问各种资源,找到适合自己的内容。

Learning in an app 在应用中学习

If you prefer to learn using apps, there are two I would recommend, both completely free. The first is Apple’s Swift Playgrounds app, which lets you learn Swift right on your iPad or Mac. There are lots of interactive lessons aimed at kids, but there are also some more advanced lessons that will help push your skills further.
如果你更喜欢使用应用程序学习,我推荐两个完全免费的应用程序。第一个是苹果的 Swift Playgrounds 应用,让你可以在 iPad 或 Mac 上学习 Swift。它有很多面向孩子的互动课程,但也有一些更高级的课程,可以帮助你进一步提升技能。

The other app is one I make myself, and it’s called Unwrap. Unwrap works on all iPhones and iPads, and lets you learn, review, and practice the fundamentals of Swift using videos, tests, and more. It covers all the fundamentals of Swift, and works great alongside the 100 Days of SwiftUI curriculum.
另一个应用是我自己制作的,叫做 Unwrap。Unwrap 可以在所有 iPhone 和 iPad 上运行,让你通过视频、测试等方式学习、复习和实践 Swift 的基础知识。它涵盖了 Swift 的所有基础知识,并与 SwiftUI 100 天课程完美结合。

Finding answers 寻找答案

Finally, you’re going to need to learn to find answers online. This might mean going to Stack Overflow, but honestly I hope not because it’s not a terribly pleasant place.
最后,你需要学会在网上寻找答案。这可能意味着要去 Stack Overflow,但老实说,我希望不是,因为那不是一个特别愉快的地方。

Instead, ask questions on the Hacking with Swift forums, on your favorite Slack group, in the iOS Dev Happy Hour sessions, on Twitter, and more – we are genuinely a very warm, welcoming community with a lot of folks willing to help you reach your goals.
相反,可以在 Hacking with Swift 论坛上、在你最喜欢的 Slack 群组中、在 iOS 开发欢乐时光会议上、在 Twitter 上等地方提问——我们真的是一个非常热情、友好的社区,有很多人愿意帮助你实现你的目标。

Connecting to the community
连接社区

Speaking of our community, I want turn to a really important topic that will help meet folks at a similar position to you, help you you learn more effectively, and help you find job openings too – it’s just a win all around.
谈到我们的社区,我想转向一个非常重要的话题,这将帮助处于类似位置的人,让你更有效地学习,并帮助你找到工作机会——这对大家来说都是一个双赢的局面。

The topic is this: connecting to the iOS development community. This means learning where to look for news and interesting ideas, where to go when you want to meet folks and share tips, and helpful places where you can ask questions.
主题是:与 iOS 开发社区连接。这意味着学习在哪里寻找新闻和有趣的想法,在哪里可以遇见人们并分享技巧,以及可以提出问题的有用地方。

Who to follow on Twitter?
谁在推特上值得关注?

Let’s start with the easiest one first, which is using Twitter. Twitter is a really fantastic way to follow things that interest you, and in the case of iOS development there are a handful of folks I would really recommend.
让我们先从最简单的开始,那就是使用 Twitter。Twitter 是关注感兴趣事物的绝佳方式,而在 iOS 开发方面,我有几位非常推荐的人。

These people tweet about their own work, yes, but the reason I think they are great to follow is because they also tweet a lot about other people’s work too – they will help you see a range of perspectives on a particular topic, and they share all sorts of interesting ideas and things to try.
这些人确实会发布关于自己工作的推文,但我认为他们值得关注的原因是他们也会大量发布关于他人工作的推文——他们会帮助你看到某个特定话题的多种视角,并分享各种有趣的想法和尝试的事物。

There are 10 folks I would suggest you follow on Twitter:
我建议你在推特上关注 10 位朋友:

  1. Sean Allen spends a lot of his time creating YouTube videos about Swift and iOS development, but he also works super hard to spread the news about things other folks have created – he really does a great job of helping everyone discover something new every week.
    肖恩·阿伦花了很多时间制作关于 Swift 和 iOS 开发的 YouTube 视频,但他也非常努力地传播其他人创造的东西——他确实做得很好,每周帮助大家发现一些新事物。
  2. Antoine van der Lee runs a website dedicated to iOS development at https://www.avanderlee.com, but he also shares some great links to useful resources he finds on GitHub, newsletters, and more.
    Antoine van der Lee 运营着一个专注于 iOS 开发的网站,网址是 https://www.avanderlee.com,他还分享了一些他在 GitHub、新闻通讯等地方找到的有用资源的精彩链接。
  3. Novall Khan works at Apple, but that doesn’t stop her from making regular videos about what she’s working on, what she’s learning, what she’s having trouble with, and more – she’s really inspiring.
    Novall Khan 在苹果公司工作,但这并没有阻止她定期制作关于她正在做的事情、她正在学习的内容、她遇到的困难以及更多的内容的视频——她真的很鼓舞人心。
  4. Steve Troughton-Smith is well known for his earlier work poking around in iOS, but really you should follow him for the fantastic range of links he shares to impressive work. I personally like the way he shares the development progress on his own apps, so you can see them grow from start to finish.
    史蒂夫·特劳顿-史密斯因早期在 iOS 方面的工作而广为人知,但实际上你应该关注他,了解他分享的令人印象深刻的作品链接。我个人喜欢他分享自己应用程序开发进展的方式,这样你可以看到它们从开始到结束的成长。
  5. Kaya Thomas is one of the most famous indie developers in our community, and has been featured by Apple more times than I can remember. She tweets a lot about her own work and presentations, but also shares links to books she’s learning from, articles she’s read, and more.
    Kaya Thomas 是我们社区中最著名的独立开发者之一,曾多次受到苹果的推荐。她经常在推特上分享自己的作品和演讲,但也分享她正在学习的书籍链接、阅读的文章以及更多内容。
  6. Majid Jabrayilov writes a fantastic blog about Swift and SwiftUI, but he’s also a tireless promoter of others – if you follow him on Twitter you’ll get idea after idea sent your way from a huge range of sources.
    Majid Jabrayilov 写了一个关于 Swift 和 SwiftUI 的精彩博客,但他也是一个不知疲倦的其他人推广者——如果你在 Twitter 上关注他,你会从各种来源收到一个接一个的想法。
  7. Donny Wals writes a Swift blog, as well as more recently writing books on Combine and Core Data, but on Twitter he also encourages folks to share what they are working on. Even just reading that thread every week will get you stoked with things to try, so you should definitely follow Donny.
    Donny Wals 写了一个 Swift 博客,并且最近还撰写了关于 Combine 和 Core Data 的书籍,但在 Twitter 上他也鼓励大家分享自己正在做的事情。每周只要阅读那个话题,你就会激动地想尝试一些新东西,所以你一定要关注 Donny。
  8. Sommer Panage works at Apple on the accessibility team, so although she’s somewhat restricted by what she can say she does tweet out lots of first-class tips from herself and others that everyone can use to build better apps.
    Sommer Panage 在苹果公司的无障碍团队工作,因此虽然她在发言上有些限制,但她仍然会分享自己和他人提供的许多一流技巧,供每个人用来开发更好的应用程序。
  9. Natascha Fadeeva writes a blog about Swift and iOS development, including articles on Core Data, interview questions, and more, but she also tweets about things she’s discovered elsewhere.
    娜塔莎·法德耶娃 写了一个关于 Swift 和 iOS 开发的博客,包括关于 Core Data、面试问题等的文章,但她也会推特分享她在其他地方发现的事物。
  10. And finally there’s me. I tweet a lot about all the things I’m working on with Swift, SwiftUI, and more, but also try to share great articles, videos, and apps that others have made – I think it’s one of the most important things I do for the community.
    最后 就是我。我经常在推特上分享我在 Swift、SwiftUI 等方面所做的工作,还尽量分享其他人制作的优秀文章、视频和应用程序——我认为这是我为社区所做的最重要的事情之一。

Newsletters and beyond 新闻通讯及其他

Of course, Twitter isn’t the only place where you can keep up with the community – there are newsletters, Slack groups, Zoom meetups, forums, conferences, and more. I don’t want to bore you too much, so I’m going to list one of each of those here:
当然,Twitter 并不是你可以关注社区的唯一平台——还有新闻通讯、Slack 小组、Zoom 会议、论坛、会议等等。我不想让你感到无聊,所以我将在这里列出其中的一个:

  • For newsletters, you can’t go wrong with iOS Dev Weekly. As I write this it just passed 500 issues, one every week, so I think that tells you all you need to know about how important it is.
    对于时事通讯来说,iOS Dev Weekly 是一个不错的选择。当我写这篇文章时,它刚刚超过了 500 期,每周一期,所以我想这告诉你关于它重要性的一切。
  • If you’d like to post on a web forum, I host one myself at https://www.hackingwithswift.com/forums – there are lots of categories to choose from, and everyone is welcome to take part regardless of your experience level. Trust me, you are more than welcome to post your beginner questions here!
    如果您想在网络论坛上发帖,我自己有一个论坛,地址是 https://www.hackingwithswift.com/forums - 有很多类别可供选择,欢迎所有人参与,无论您的经验水平如何。相信我,您非常欢迎在这里发表您的初学者问题!
  • Every month iOS Dev Happy Hour takes place on a group Zoom call with over 300 people, but the real fun here is the breakout rooms where you get to chat to groups of 6 to 8 people at a time. It’s a lot of fun, and you will make friends.
    每个月 iOS 开发者快乐时光 会在一个超过 300 人的 Zoom 会议中举行,但真正有趣的是分组讨论室,您可以与 6 到 8 人的小组聊天。这非常有趣,您 交到朋友。
  • Attending conferences has been tricky thanks to the coronavirus pandemic, but Apple’s WWDC was a huge hit last year and also had a wide variety of community events taking place alongside. A group of friends and I ran a GitHub repository to help list all the other events, articles, and more that happened – check it out!
    参加会议因为新冠疫情变得很棘手,但苹果的 WWDC 去年大获成功,并且还举办了各种社区活动。我和一群朋友开设了一个 GitHub 仓库,帮助列出发生的其他活动、文章等——快来看看!
  • And finally, if you like to chat on Slack where you can get answers more quickly, you can join the free Hacking with Swift Slack group and join one of the channels for Swift, SwiftUI, my 100 Days curriculums, and more.
    最后,如果你喜欢在 Slack 上聊天并且可以更快地得到答案,你可以加入免费的 Hacking with Swift Slack 群组,并加入其中一个有关 Swift、SwiftUI、我的 100 天课程等的频道。

How long does it take?
需要多长时间?

This is a question I get asked a lot: how long does it take to go from knowing nothing about Swift to being able to get an entry-level iOS developer position.
这是我经常被问到的一个问题很多:从一无所知到能够获得入门级 iOS 开发职位需要多长时间。

Obviously the answer is “it depends”, but that would be a cop out here so let me address it in a few different ways.
显然,答案是“视情况而定”,但这样回答显得不够诚恳,所以让我用几种不同的方式来阐述。

The golden rule: don’t rush
黄金法则:不要着急

First, what you cannot do is rush through several courses at the same time. Remember what I said about shiny object syndrome? Yeah, that – many people really do think they can double up with two courses at the same time, then rush through four, five, or even more hours every day and still end up with a high-quality understanding of the topics they covered.
首先,您不能做的就是同时匆忙上好几门课程。还记得我说的关于闪光物体综合症吗?对,就是这个——许多人真的认为自己可以同时上两门课程,然后每天快速学习四、五个甚至更多小时,最终仍能高质量地理解他们所涉及的主题。

To be clear, I have seen folks try that so many times and it fails every time. Every single time – it never works, and I see folks say it was because the tutorials were bad, or because Swift was too hard, or for literally any other reason than that they tried to rush through something that was complex.
要明确的是,我见过人们尝试那样做很多次,每次都失败。每一次——它从来没有成功过,我看到人们说这是因为教程不好,或者因为 Swift 太难,或者出于任何其他理由,而不是因为他们试图匆忙完成复杂的事情。

Literally just today I received an email saying, “Hi Paul! If I spend four or five hours a day studying Swift, how fast can I finish?” And that’s just not how learning works – not learning Swift, not learning to play the piano, not learning to ice skate, or whatever.
今天我收到了一个电子邮件,上面写着:“嗨,保罗!如果我每天花四到五个小时学习 Swift,我能多快完成?”这根本不是学习的方式——无论是学习 Swift,学习弹钢琴,学习滑冰,还是其他任何东西。

Learning Swift is really hard in places, and learning to build apps takes a lot of trial and error, a lot of making mistakes, and a lot of wrong turns. And that’s all okay – it’s better than okay, it’s great! Because each time you try something, each time you make a mistake, and each time you take a wrong turn, you learn something along the way and when you finally come to the solution you’ll understand it in much more depth.
学习 Swift 在某些地方确实很困难,学习构建应用程序需要大量的尝试和错误,需要犯很多错误,也需要走很多弯路。这都没关系——这不仅没关系,甚至很好!因为每次你尝试某件事,每次你犯错误,每次你走弯路时,你都在过程中 学习 到一些东西,当你最终找到解决方案时,你会更深入地理解它。

So, the TL;DR here is don’t try and rush – take your time, don’t be afraid to explore tangents that come along, don’t be afraid to experiment with your projects, and don’t be afraid to go back to something you learned previously and relearn it as needed.
所以,简而言之,不要急于求成——慢慢来,不要害怕探索出现的旁支,勇于尝试你的项目,不要害怕回去重新学习之前学过的东西,根据需要重新学习。

What’s your background? 你的背景是什么?

Second, you should take into account what kind of background you had before you came to Swift. You see, learning to build apps takes a wide variety of skills, and if you’re coming to the table with lots of existing knowledge such as version control, data structures, algorithms, and more, then you have a real head start compared to folks who are coming new to computer science in general alongside to coming fresh to Swift and other Apple frameworks.
其次,你应该考虑一下在来到 Swift 之前你拥有怎样的背景。你看,学习构建应用程序需要各种技能,如果你具备很多现有的知识,例如版本控制、数据结构、算法等等,那么相比那些刚接触计算机科学以及刚开始学习 Swift 和其他苹果框架的人,你就有了真正的先发优势。

So, we could think about a few different places you might be right now:
所以,我们可以想象你现在可能在几个不同的地方:

  • If you have a computer science degree, you will already have covered many of the CS fundamentals required to get moving with Swift. Things like variables, arrays, loops, arrays, sets, functions, OOP, and more will all prove useful in Swift, as well all your work with data structures and algorithms. This could shave 4-6 months off your learning path depending on what subjects you studied, and also give you an advantage when applying for a job at many companies.
    如果你拥有计算机科学学位,你已经学习了许多掌握 Swift 所需的计算机科学基础知识。变量、数组、循环、集合、函数、面向对象编程等都将在 Swift 中派上用场,还有你在数据结构和算法方面的所有工作。这可能会根据你所学的科目为你的学习路径节省 4 到 6 个月的时间,同时在申请许多公司的职位时也会给你带来优势。
  • If you don’t have a CS degree but did go to a coding bootcamp, again you will have many of the fundamentals you need to get moving with Swift. This won’t give you the same advantage when applying for a job at those companies, because often they literally expect a degree so they can put a check on their list of arbitrary requirements, but it will still shave maybe three or four months off your learning path.
    如果你没有计算机科学学位,但参加过编码训练营,你将拥有许多你需要的基础知识,以便开始学习 Swift。在申请那些公司的职位时,这不会给你带来同样的优势,因为他们通常确实期望有学位,以便在任意要求的清单上打勾,但这仍然可以让你缩短大约三到四个月的学习时间。
  • If you don’t have a CS degree and did not attend a bootcamp, but you have been doing coding your spare time, again that will shave off some time off your learning path – probably two months or so, depending on what language or frameworks you were using.
    如果你没有计算机科学学位,也没有参加培训课程,但你在空闲时间一直在编程,那么这将缩短你的学习时间——大约两个月左右,具体取决于你使用的语言或框架。

And what if you have no CS degree, no bootcamp, and no prior coding experience? Then I’d say you’re looking at 9 to 12 months to go from nothing to an entry-level job. Yes, that’s potentially a full year of work alongside whatever is your current full-time job, and that’s just to get your first job as an iOS developer.
如果你没有计算机科学学位,没有培训班,也没有以前的编程经验,那你可能需要 9 到 12 个月的时间从零开始进入一个初级职位。是的,这可能意味着你需要在全职工作的同时再花一整年的时间,这只是为了获得作为 iOS 开发者的第一个工作。

Is it always a year? No. Like I said, you can shave 1 to 6 months off that if you do have prior experience. If you take the best numbers on both sides – 9 months from nothing to an entry-level job, plus shaving 6 months off for having a CS degree – and that potentially means you could be hirable in just 3 months, which is remarkable.
不,总是需要一年吗?不是。如我所说,如果你有相关经验,可以减少 1 到 6 个月的时间。如果你把双方的最佳数字拿来比较——从零到入门级工作的 9 个月,加上因为拥有计算机科学学位而减少的 6 个月——这可能意味着你只需 3 个月就能被雇用,这真是了不起。

Now, you might think getting your first job in three months is impossible, but it isn’t. Heck, I met someone who was following my 100 Days of Swift course who got a job before they reached day 50 – they had already learned enough about app development in under two months, because they put in the work to make every day count.
现在,你可能会认为在三个月内找到第一份工作是不可能的,但其实并不是。实际上,我遇到过一个在参加我的《100 天 Swift》课程的人,他们在第 50 天之前就找到了工作——因为他们在不到两个月的时间里已经学到了足够的应用开发知识,因为他们努力让每一天都有意义。

So, you don’t need a CS degree, and you don’t need a bootcamp, but you do need to be prepared to work hard.
所以,你不需要计算机科学学位,也不需要参加训练营,但你确实需要准备好努力工作。

Cut yourself some slack 放松一点自己

The third thing I want to address before we move on is to say “it takes as long as it takes.” John Lennon has a fantastic lyric that I love, which is “life is what happens when you’re busy making other plans.”
我想在继续之前提到的第三件事是“所需时间就是所需时间”。约翰·列侬有一句我非常喜欢的歌词:“生活就是你忙着制定其他计划时发生的事情。”

It’s really fantastic if you have grand plans for learning, and big aspirations for the job you want to have, but sometimes you’re tired, sometimes you’re stressed out, sometimes your roof starts leaking or your dog needs to go to the vet or your kids need extra help with their homework, or whatever, and that’s just life. So, please don’t beat yourself up if you fall behind with your learning schedule, or if you find yourself missing a few days or even a few weeks, and so on – as long as you’re resilient, you’ll get there.
如果你有宏伟的学习计划和对未来工作的雄心壮志,那真的太棒了,但有时候你会感到疲惫,有时候你会感到压力,有时候屋顶漏水,或者你的狗需要去看兽医,或者你的孩子在做作业时需要额外的帮助,等等,这就是生活。所以,如果你在学习计划上落后,或者发现自己错过了几天甚至几周,请不要对自己太苛刻——只要你保持韧性,你就能成功。

If you work super hard and get a job after 50 days, that’s fantastic – well done! If it takes you 500 days, that’s also fantastic and you should be just as proud. Heck, if it takes you five years I know it’s probably not what you wanted, but the end result is the same and that’s what matters.
如果你努力工作并在 50 天内找到工作,那太棒了——干得好!如果你花了 500 天,那也非常棒,你应该同样感到自豪。其实,如果你花了五年时间,我知道这可能不是你想要的,但最终的结果是一样的,这才是最重要的。

Preparing to apply 准备申请

Last but not least, if you’re a little further into your iOS learning path and starting to think about getting that first entry-level job, I want to point you to a massive collection of resources I assembled to help you.
最后但同样重要的是,如果你在 iOS 学习路径上稍微深入一些,并开始考虑获取第一份入门级工作,我想向你推荐我收集的一个庞大资源库,以帮助你。

On my site you can click Careers > Start Here, or just visit https://www.hackingwithswift.com/career-guide directly. There you’ll find an epic collection of resources that will help you no matter where you are, all of which are free:
在我的网站上,您可以点击“职业 > 从这里开始”,或者直接访问 https://www.hackingwithswift.com/career-guide。在那里,您会发现一个 史诗般的 资源汇集,无论您身在何处,这些资源都将对您有所帮助,全部免费:

  • Interactive skill reviews to test your knowledge of core topics.
    互动技能评估,测试您对核心主题的知识。
  • Coding tests that are used around the world in real job interviews.
    用于全球真实工作面试的编码测试。
  • Over 200 commonly used interview questions, along with suggestions for ways you can answer them.
    超过 200 个常用面试问题,以及您可以回答这些问题的建议。
  • Articles covering how to find jobs, how to do your best at interviews, and more.
    涵盖如何找工作、如何在面试中表现最佳等内容的文章。

Just go to the URL and you’ll find links to all that and more in one place.
只需访问该网址,您就会在一个地方找到所有相关链接及更多信息。

I also want to point you towards Sean Allen’s series of videos for Swift interview tips – he has a whole playlist for them where you can work through individual discussions such as classes vs structs, functional programming, error handling, and more. None of the videos are super long, but each one is aimed at giving you the skills you need to perform well in an interview scenario.
我还想向你推荐 Sean Allen 的 Swift 面试技巧视频系列——他有一个完整的播放列表,你可以在其中逐个讨论类与结构体、函数式编程、错误处理等主题。视频都不是很长,但每一个都旨在帮助你掌握在面试场景中表现出色所需的技能。

Where now? 现在在哪里?

Okay, so I’ve gone through the core and extension skills you need, common mistakes folks make when learning, what courses you can follow, how to connect to the iOS community, and how to prepare for your job interview – that’s a huge amount to get through, and I hope it’s been useful.
好的,我已经讲解了你需要的核心和扩展技能、学习时常见的错误、可以参加的课程、如何与 iOS 社区建立联系以及如何为面试做准备——这些内容非常庞杂,希望对你有所帮助。

What’s more, I hope I’ve shown you how much is out there that is completely free. Yes, I know the temptation is strong to splash out a hundred bucks or more for a course, but relax – get moving first, find some momentum, and also find someone who teaches Swift in a way that works for you. And then, when you’re in a good place and feel ready, fine: go ahead and spend some money if you want.
更重要的是,我希望我已经向你展示了有多少完全免费的资源。是的,我知道花上几百块钱或更多参加课程的诱惑很强,但放轻松——先开始行动,找到一些动力,并寻找一个以你能接受的方式教授 Swift 的人。然后,当你处于一个好的状态并感到准备好时,好的:如果你想的话,随便花点钱。

Best of luck with your journey!
祝你旅途顺利!

Hacking with Swift is sponsored by Essential Developer.

SPONSORED Join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer! Hurry up because it'll be available only until September 29th.
赞助 参加一个免费的速成课程,适合想要获得专家级技术和实践技能的中级/高级 iOS 开发者——这是成为全面高级开发者的快速通道!赶快报名,因为该课程仅在 9 月 29 日前开放。

Click to save your spot
点击以保存您的位置

Sponsor Hacking with Swift and reach the world's largest Swift community!
赞助 Hacking with Swift,加入全球最大的 Swift 社区!

BUY OUR BOOKS 购买我们的书籍
Buy Pro Swift Buy Pro SwiftUI Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let us know!

Average rating: 4.8/5

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.
链接已复制到剪贴板。