那是不是 Objective-C 就不需要学习呢?并非如此。Swift 还没有很好地解决好跟 C 和 C++ 混编的问题。很多项目底层核心库会采用 C/C++,界面和大部分逻辑采用 Swift 编写,需要 Objective-C 作为粘合层。另外还存留很多库是用 Objective-C 编写的,使用这些库需要一定 Objective-C 知识。
随着时间推移,Swift 在整个 iOS/Mac 工程中占的代码比例会越来越多,而 Objective-C 作为粘合层还是会存在。Objective-C 的语法很独特,就算跟 C++ 写在同一文件,也不会搞混,Objective-C 跟 C++ 混编是很容易的。Swift 调用 C 代码还勉强可以(还不够方便),但直接调用 C++ 没有什么可能。
或者有些人会觉得小小的一个 App,还需要跟 C/C++ 混编?你是小看了 App 了,App 会越做越复杂的。应该当成跟 PC 平台相同的地位看待,PC 平台的软件可以达到什么规模,App 就会达到什么规模。在需要高性能,跨平台的场合,C/C++ 还是绕不开的。
很多人现在还没有学习 Swift,觉得它没有什么优点,只是一个语言大杂烩。只是等你真正使用 Swift 编写一两个项目,就回不了头。Swift 有些简便快速的写法,在 Objective-C 中是没有办法做到的。并且 Swift 的一些语言特性避免了很多 Objective-C 的坑。使用 Swift 编写的任何功能,使用 Objective-C 也可以做到,但是会麻烦得多。而假如太麻烦的话,明知道是好的,也不会去做。
很多事情,你还没有见识过的时候,会觉得不需要。但等你真正接触过了,就难以忍受再次失去了。比如洗衣机、热水器。我翻看整理 3、4 年前的项目,那时项目还没有采用 ARC。现在看来假如没有 ARC,代码写起来太麻烦了,但当时根本不会有这样的感觉,那时还没有见识过更先进的写法。Swift 比 Objective-C 先进。
现在 Swift 还不稳定,语言、库、相关工具将会快速变动,而这恰好说明它在发展。
很多大公司为求稳定,会仍然采用 Objective-C。而个人开发者和小团队,新项目应该直接采用 Swift 编写,旧项目的新模块也应该使用 Swift 编写。这样慢慢将整个语言重心从 Objective-C 切换到 Swift。Swift 的代码更简洁,开发效率更高。原有 Objective-C 项目,已经使用 Objective-C 编写的比较稳定的库,不需要也不建议要用 Swift 重新编写,直接混编,让它慢慢过渡就行了。
求稳是大公司的通病。 个人开发者和小团队,求稳一定不能跟大公司竞争的,更应该求好求变。
另外还是会有人说,现在很多公司的项目是规定一定需要使用 Objective-C,那怎么办,我不能选择啊。这个看你个人的追求了,假如只满足于找一份工作,那公司需要什么就去学什么,但从个人发展的角度来说,iOS 开发中,两种语言都需要学习的。其实 iOS 开发中,语言的学习从来就不是难点。