Swift杂谈

693 查看

有关 Swift 的一些事

昨天晚上我和一些本地的开发者们聊了聊 Swift。其中一些内容至今仍徘徊在我的脑海之中。例如下面这个问题:

问题

两年之后,你的公司正在招聘,在所有应征者中最优秀的那位有一个问题:她的开发经验仅限于 Swift 语言,对于 Objective-C 并不熟悉。但是可以确定她对于 SDK 非常熟悉并且有能力交付高质量的软件。

而你所拥有的规模相当庞大的旧代码都是使用 Objective-C 的。可能也有小部分功能开始使用 Swift 开发,也可能没有,可能你已经计划在后续的开发中更多地使用 Swift,也可能没有。那么问题来了:

你是否会雇佣这个人?

学习 Swift 是困难的

Objective-C 看上去很难学,因为少见的中括号语法 [ 和 ] ,以及那些长长的函数名。事实上它有一些古板和刻薄,像一个眉毛浓密的老爷爷生气地要求你完整地拼写“I am laughing out loud”,而不是使用缩写 LOL。

但是相比于 Swift,Objective-C 其实是更容易学的。初看 Swift 你可能会觉得它很简单,所有 JavaScript 程序员都会觉得 Swift 的语法非常熟悉,甚至很多人认为他们开发原生应用的好日子到了。

我相信这种大家更熟悉的语法会帮助更多的人起步。但是很快你会遇到一些 Objective-C 中根本不会碰到的概念(例如:optional, generic 和 tuple),还有一些 Objective-C 中不需要过多考虑的概念(例如:值和引用,函数式设计和严格类型安全)。并且你一定会遇到如何和 Objective-C 代码交互的问题,如果你只使用 Objective-C 开发这显然不是一个问题。

Angle-bracket-T Blindness

为了说明下面这个观点我可能会有一点夸张——OK,应该是相当夸张。大多数有关 Swift 的博客有一个共同的模式,这个模式如下:

下面是旧式的做法:

你可以直观地看到这是多么糟糕的做法。不易理解的循环和没有类型声明的变量,让我们用更现代的方法来改写它:

[snip]

[snip 200 lines of code]

很明显以上这个例子是有意地进行了夸张,所以非常荒谬和无意义。可能对于 Swift 来说这有点不公平,但是我相信任何像我一样读过许多有关 Swift 文章的人都会理解我在试图表达什么。

(有许多博客上有关 Swift 的文章是很棒的。我最喜欢的两个分别是 NSHipster 和 David Owens II,但是我依然会时不时遇到 angle-bracket-T blindness,即使是他们写的文章。)

Objective-C 并不会停止改变

这是一个预测。苹果显然拥有比任何人更多的 Objective-C 代码。改进 Objective-C,特别是为了让开发者们可以变得更高效、做出更优秀的 APP 的改进,是对苹果有好处的。

可能我们会迎来的是更多的融合,Objective-C 会变得更加容易和 Swift 在同一个项目里共同工作。

我一直觉得对于苹果来说,改进 Objective-C 显然比用 Swift 重写所有代码要来得容易得多。

但是 Swift 毫无疑问是未来

即使处在一个非常早期的阶段,Swift 的使用情况和开发者们对他的热情,已经超出了我的预期。如果你拥有一个开发者帐号,你可以浏览一下苹果的 Swift 论坛。

现在的情况是,当你搜索有关最新的 API 的问题时,你极有可能会碰到的是 Swift 代码。至少在我身上这种事情已经发生过许多次,我需要将 Swift 代码转换到 Objective-C 去,没有想到这种情况来得这么早。

Swift 已经来了。

P.S.

最后,我会雇佣只拥有 Swift 经验但是没有 Objective-C 经验的人。