我爱Swift,我讨厌使用Swift

最近,我被问了很多以下问题:“为什么还要使用Objective-C?” 或“为什么不使用Swift?” 在Slack频道,Twitter,Podcasts上,所以我决定在我的Medium帐户上开设一个更详尽的答案,说明为什么我仍在使用Objective-C。

免责声明:我不是在这里说什么是对还是错,应该做什么和不应该做什么,我只是在阐述为什么Swift不适用于

简介

最近,我们迎来了iPhone SDK诞生10周年的纪念日,这实际上使我意识到我已经使用iOS已有10年了。 在发布SDK的那一刻,我下载了它并开始使用Xcode,发布了一些应用程序,并在一两年后获得了我的iOS开发人员正式职位。

这就是说我对Objective-C感到很自在,而且当新技术问世时我也大肆宣传,并面临这样做的后果,这使我在开始使用新技术之前至少思考了3倍。科技火车。

迅捷的自己

首先要考虑的是Swift本身,它是一种语言。 好不好吗? 比Objective-C好还是坏? 这些都是复杂的问题,由于涉及很多个人喜好,因此很难客观地回答。 我喜欢它,我认为语法是好的,它用途广泛,并且易于阅读(这通常对开发人员本身造成的负担比对语言的负担更大)。 总的来说,我认为这是一种不错的语言,我真的很想更频繁地使用它,这是我将开始列出不这样做的原因的部分。

可怕的更新

这变得越来越不成问题了,但是Swift是一种新语言(2014年),与它初次出现的Objective-C相比,更新自然会很快(而且非常生气),并且会出现重大变化,新语法等,因此非常迅速。 1984年。每年,Swift更新都会破坏以前的代码,有时需要大量工作,有时需要简单的快速修复,但几乎像我的消遣方式一样,阅读有关Slack / Twitter的评论,人们对其项目未编译感到焦虑/紧张。使用某些库已更新到最新的Swift版本的库,而另一些则没有,必须管理所有这些库。 在Objective-C世界中不存在的问题。

几周前,我在Mac(iOS 4/5)上发现了一些非常老的项目,为了娱乐,我决定打开并尝试运行。 令我惊讶的是,一切正常。 讨厌的纹理和UI不能很好地老化,但是可以正常运行。 当然,获得一个有6年历史的项目并运行它不是一个非常常见的用例,但是,另一方面,我最近帮助了一位继承了Swift项目的朋友,除了项目本身,该项目在大约2年内没有更新。如果不进行编译,则所有依赖项也都已过时,其中一些依赖项从未见过新的Swift版本支持。

但是正如我之前写的那样,Swift越来越稳定,并且很快将不再是问题,但是直到今天,我仍然看到Slack上的人们由于Swift版本的迁移而遇到了问题。 尽管如此,如果这是我考虑在新项目中使用Swift的唯一问题,不幸的是,并非如此。

迅捷工具包

这就是我为什么不使用Swift的最大原因所在。 当我说“工具包”时,我指的是与Swift一起使用的所有东西,以拥有一个不错的开发环境:Xcode,LLDB,LLVM,Instruments等。

Xcode对Swift的支持几乎是可笑的,语法突出显示不起作用,编译时间非常长,缺少Swift重构,最重要的是,LLDB根本不起作用。

LLDB是我工作流程的重要组成部分,不仅用于调试,而且还用于实际编写代码,自动化流程,编写日志等。我写了一篇关于葡萄牙语使用LLDB的事情的帖子(葡萄牙语),但它们并没有在Swift中无法使用。 使用Objective-C,我可以使用调试器命令执行很多断点操作,有时我会使用LLDB表达式编写整个方法,然后对结果感到满意时,甚至对某些我喜欢使用的日志,都会对实际代码进行转录LLDB +断点操作,而不是NSLog。

现在您可能正在考虑“但是您可以在Swift中做所有事情”,我说“您不能”,这不是因为该功能不存在,不是因为LLDB在Swift中不存在,而是因为它们是超级越野车 。 一个简单的po命令几乎立即在Objective-C项目上运行,在Swift上,它最多可能需要4秒钟才能返回(在最大容量的2015 MacBook Pro上),而当它很幸运时,它就会变慢,因为更多通常,调试器连接只会丢失,而我知道解决此问题的唯一方法是重新启动Xcode 模拟器。

我相信,这通常是许多对Xcode的抱怨的源头,我看到人们抱怨Xcode有错误,这种方法不起作用,我只是不能与此相关,而不是在我使用Objective-C时。

去斯威夫特还是不去斯威夫特?

总之,我认为Swift是一种很棒的语言,我可以在macGist这样的业余项目中自己使用它,这是一个很棒的示例,如果您想看到一个不熟悉Swift的人开发的Swift项目以及一个AppKit项目一个不了解AppKit的人,但是每次我打开一个Swift项目时,都要花几分钟的时间,直到我想念Objective-C世界。 不是因为语言,不是因为我的语言效率更高,而是因为该工具包可以正常工作。 有些人可能会发现过去,为了利用Swift的出色优势和性感的语法,我做不到。 我提到的所有这些问题,语言更新和工具包都不是Objective-C的问题,这对我来说很难证明更改的合理性。

我真的希望今年可以为Swift改进和优化新的开发工具,希望我可以使用Xcode而不会使代码完成或语法突出显示崩溃,我可以在LLDB上运行表达式而不必等待音高下降的等效时间。 在那之前,我将对所有我认为“关键任务”的东西都使用Objective-C。 我真的很喜欢Swift作为一种语言,但是Swift作为开发解决方案仍然不是我的节奏。