为什么Apple使用Obj-C作为内部代码而不是Swift

时间:2017-10-26 11:02:42

标签: objective-c swift

我今天正在做一些编码,我在Swift中为我的一个viewcontrollers创建了一个类。我忘了将我的班级绑定到我的viewcontroller,所以当我打开助理编辑器时,它给了我通用的viewcontroller基类。

此处image 1

我注意到它似乎在Obj-C中。 (在我根据之前见过的Obj-C中的其他代码进行猜测之前,我从未研究过Obj-C)

为什么Apple使用Obj-C而不是Swift。我认为苹果的官方语言是Swift,我认为苹果公司做了这么大的努力让Obj-C开发人员使用Swift而不是Obj-C。

如果Swift应该是Obj-C的更好版本,并且使用Swift 4,我们几乎可以在Swift中做所有Obj-C可以做的事情,为什么Apple不会转换为Swift并且过时Obj-C (我知道这需要时间和金钱,而且不会一夜之间发生)

在我看来,对于初学者来说,Swift会更简单地学习Obj-C(我知道因为我在2个月内学会了它)而且Swift不那么复杂,而且更好地布局了Obj-C

我知道Swift是错误的,因为HECK我每天遇到错误,但是当它开始时Obj-C更糟糕(后见之明的好处)所以在几年内Swift将等于或大于Obj-C保持其基本的简单性

如果我错了,请纠正我

3 个答案:

答案 0 :(得分:4)

Cocoa中有几个核心概念,在Swift中根本无法实现。我最喜欢的是响应链。试着在Swift中做到这一点......

每个早期绑定,静态类型语言都需要一个动态的开门器才能构建GUI应用程序的框架。对于Swift,这是Objective-C。没有Objective-C的Swift就行不通。

因此斯威夫特从未被称为“官方语言”。并问AppKit团队的一些人,他们会回答什么。

答案 1 :(得分:3)

那是因为Objective-C在Swift之前出现了。

将每个Foundation和UIKit类从Objective-C重写为Swift需要花费很长时间,并且需要进行大量测试才能替换已经生产了数十年并且正常工作的东西。

答案 2 :(得分:2)

它归结为年表。

macOS,原名为OS X(发音为“OS Ten”),于2001年在公开测试版发布后于2001年发布。它的API根源于NeXT(所有那些以NS为前缀的类)始于1985年。

From Wikipedia:

  

将成为macOS的传统起源于NeXT,a   公司由史蒂夫乔布斯在离开苹果公司后成立   在那里,开发了类似Unix的NeXTSTEP操作系统,然后在1989年推出.NeXTSTEP的核心是基于   Mach内核,最初是在Carnegie Mellon开发的   大学,具有额外的内核层和低级用户空间   源自BSD部分的代码。它的图形用户界面已经构建   在使用Objective-C的面向对象的GUI工具包之上   编程语言。

iOS(或者如果你愿意的话,UIKit)于2008年发布,比原版iPhone推出一年。

和斯威夫特?版本1于2014年发布。此时我打赌(并且可能赢得赌注)Apple雇用的ObjC编码器比Swift更多。我甚至可能会打赌High Sierra和iOS 11中的所有代码都是用ObjC编写的。

Apple了解事情发展的缓慢程度。在他们宣布从PowerPC向英特尔转型之前,他们已经在英特尔芯片上运行了OS X.在他们宣布之前的几年,他们在一些地方“使用”斯威夫特。很可能他们 在基于Swift的UIKit上工作 - 已经有几年了。

但商业上发布了如此怪异的过渡?可能还有几年了。特别是如果你考虑(1)Swift的开源性质,(2)它的性质迅速发展,(3)缺乏ABI - 大约一年就会出现。