现在Swift和Objective C的竞争正在飞快加剧。 这是很容易理解的,因为他们都有各自的好处,一些开发人员对对如何选择一个适合项目的编程语言产生了困惑。
首先,这两者之间的选择是没有严格的答案。在做出选择之前,要考虑很多事情,包括各种因素和特征、各自缺点和优点。 因此,这里做一个概述,以客观展示双方之间的差异和利弊,因为我们认为明智的做法是选择根据是否适合自己的开发团队和具体项目进行选择。
管理考虑
第一个考虑是根据特定团队选择。即使Swift通常被称为更简单,更平滑的语法语言,它消除了更复杂的Objective-C的一些麻烦,但仍然有一些进入门槛。这里正确的问题不是“如果团队能够使用Swift / Objective-C构建新项目会怎样”,而是“现在的团队是否能使用它在截止日期之前完成任务?
与你的团队开会询问他们,必须确保他们不仅能够使用Swift实现,而且确保及时完成。如果团队是Objective-C专家,强制他们使用Swift并在一个有严格期限的项目上使用并不是一个好主意。反之亦然。 严格的截止日期决定了团队使用最舒适的语言(如果没有被环境覆盖)。
项目规模
下一个考虑可能是的项目的规模。 小型项目可以从Swift的简单语法,文件结构等功能中受益,而大型项目则可能会受到Swift这是一门年轻语言的影响。当然会有Xcode转换到新版本的手段,但他们不是完美的,随着项目增长事情变得更糟。Swift因为年轻也带来了一些缺点,比如错误和不稳定性,以Swift的原生IDE - Xcode为例,经常报告崩溃现象发生,Xcode语言的许多不兼容等问题也有报道,虽然Xcode中提升效率相当快,许多错误已经解决。 但是有些新错误还会来。
技术原因
这两种语言之间有多种区别,但它们至少有一个重要的特征 -它们都是苹果公司的主要编程语言,适用于所有苹果平台的应用程序开发。 Objective-C早在八十年代早期就已经开发出来,它属于Generation X.原始的Cocoa是写在其中的,虽然Swift的书面部分自2014年推出以来一直被添加到Cocoa和Cocoa Touch。
Objective-C是C的严格超集,从Xerox Smalltalk得到其面向对象的语法。 它的性质是高度动态的,具有动态绑定和动态类型,而Swift有静态类型检查。
现在让我们看看这两种语言的优势,一方优势可以被认为是另一一方弊端。
为什么选择Swift
使用方便
Swift的设计更容易使用,比Objective-C更容易阅读理解。它的语法更接近自然的英语,放弃了一些传统的约定 - 没有更多的括号链,在任何对象相关的关键字或Objective-C特定类型之前没有更多的“@”。 看起来更清晰; Swift有时被称为“没有C的Objective-C”。Swift不是基于C的,不仅简化了语法,而且降低了Java,Python,C ++等程序员用于掌握Swift的门槛。
Swift也不那么冗长,特别是在字符串处理中,甚至支持使用简单的“+”添加字符串。
内存管理在整个代码中是统一的,不同于以前的面向对象,自动引用计数(ARC)现在可以在代码的面向对象和过程两部分中同时适用。 Objective-C会有大量的内存泄漏,Swift使这点变得不可能了,并解放了程序员的开发时间。
此外,Swift不使用双文件系统,没有更多的.h头文件+ .m实现文件,只有一个.swift代码文件(感谢LLVM编译器和Xcode IDE依赖处理)。
安全
Swift被设计成一种安全的语言。在这个世界上没有不发生故障的安全语言,但是错误处理是非常好的考虑,类型系统是非常强大的。
不像Objective-C不会在nil指针调用上抛出异常,比如说,如果你试图调用一个未初始化的指针变量的方法,它只是使这个表达式为无操作,在Swift的可选类型和值类型使得在nil指针调用上生成编译器错误。这意味着无操作相关的不可预测的不稳定行为消失了,它大大缩短了错误修复费用。
动态库
在iOS 8中,一个期待已久的新技术被带到了移动平台 - 支持动态库。 从那时起,Swift应用程序能够与Swift的较新版本链接,允许Swift在演变上比iOS更快,这是现代语言必须的。 动态库也是外部的应用程序可执行文件,允许较小的初始下载和差异化的移动和嵌入式应用程序的负载。
未来
Swift可能只有两年时间,但自2014年以来,它的流行度已经迅速增长到所有开源Cocoa项目的30%左右。随着苹果明确瞄准Swift取代Objective-C作为他们的主要语言,未来将转向Swift。
但这不是一个明天就能达到的问题,这种过渡将需要一些时间,但它预计在5 - 10年左右,因此有开发人员适应的时间。
颇为青睐的效率苹果软件缺陷报告工具显示苹果有多努力地为Swift推广。苹果还将适应社区的想法,吸收其知识和经验,并在未来版本中实施其解决方案。 完美的方式。
为什么选择Objective-C
兼容性和支持
尽管Xcode团队的努力,但是IDE不是很好支持Swift,因为可能它太新了。自动完成滞后了,语法突出几乎是非基础功能的,重构工具会不工作。 使用Objective-C编程已经有一段时间了(> 30年了!),它非常成熟,有非常辉煌的工具支持。
由于Swift是“无C语言”,C ++库在这里不可用。 同样的包括C ++跨平台SDK和API的基础(如的CoreFoundation )。
有一些工具如桥接和包装类,但这些努力通常不值得,坚持Objective-C最好的情况下是使用C ++和Foundation API。
Swift不仅年轻,而且与旧的操作系统不兼容,它的支持从iOS 7.0+和Mac OS 10.9+开始(tvOS和watchOS支持任何版本的Swift),因此Objective-C是老平台的首选工具平台。
专业
不仅一些团队在Objective-C上有更多的经验,但是如果你有兴趣外包你的项目的一些部分,更容易找到第三方专家。
动态
尽管Swift可以从静态类型检查中获益于优化,但是即时添加的方法不再可用,所有类型都在运行时之前定义。 如果你绝对需要动态类型,那么Swift是不行的。
运行
Objective-C是一个更加确定的平台,因此它有一个更稳定,更强硬和可靠的运行时。 我们不想说Swift不能实现这个规模,但它需要时间。
结论
正如我们所看到的,两种语言都有自己的优势和权衡,但他们确实有可能一起工作(在较小的项目中,但最好是)。