【问题标题】:Why does Apple use Obj-C for their internal code rather than Swift为什么 Apple 使用 Obj-C 作为内部代码而不是 Swift
【发布时间】:2017-10-26 11:02:42
【问题描述】:

我今天正在做一些编码,我用 Swift 为我的一个视图控制器创建了一个类。我忘记将我的类绑定到我的视图控制器,所以当我打开助手编辑器时,它给了我通用的视图控制器基类。

这里

我注意到它似乎在 Obj-C 中。 (我从来没有研究过 Obj-C,之前我只是根据我之前看到的 Obj-C 中的一些其他代码进行猜测)

为什么 Apple 使用 Obj-C 而不是 Swift。我认为 Apple 的官方语言是 Swift,而且我认为 Apple 确实大力推动了 Obj-C 开发人员使用 Swift 而不是 Obj-C。

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

在我看来,对于初学者来说,Swift 比 Obj-C 更容易学习(我知道,因为我在 2 个月内就学会了)而且 Swift 比 Obj-C 更简单,布局更好

我知道 Swift 是错误的,因为我每天都会遇到错误,但我敢打赌 Obj-C 在刚开始时会更糟(事后看来),所以几年后 Swift 将等于或大于 Obj-C保持其基本的简单性

如果我错了,请纠正我

【问题讨论】:

  • 尽管 ObjC 已有 30 多年的历史,而 Swift 只有 4 年,但 Apple 目前支持 both ObjCSwift 方法相同; Foundation 类和 UIKit 目前基于 ObjC
  • UIViewController 可以追溯到 2007 年,在 Swift 之前。 Apple 没有魔杖可以将所有现有的 Objective-C 代码转换为 Swift。这需要时间。
  • 我了解转换需要时间。我讨厌我的老师让我们将 C++ 程序转换为 Swift。 Apple 完全支持这种语言 Swift 似乎很奇怪,但他们仍然使用 Obj-C。我知道 Obj-C 是一种很酷的语言,但它似乎有点过时了。这就像在一个非常旧的蛋糕上撒糖霜
  • 不可能。用 Swift 编写响应者链是根本不可能的。在 Swift 中编写一个通用的撤销管理器是根本不可能的。 ... 如果有人说,有可能,请给我代码。这两个概念都可以用 Objective-C 中的几行代码来编写。翻译成 Swift 并不过分,翻译成 Swift 也不会花费太多时间。不可能把它翻译成 Swift。
  • @holex - 不,Swift 中的 Foundation 本身就是事物。它不是来自 objc 的 Foundation。至于 UIKit - 你是对的。

标签: objective-c swift


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      它归结为年表。

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

      From Wikipedia:

      后来成为 macOS 的遗产起源于 NeXT,一个 乔布斯离开苹果后创立的公司 1985 年,开发了类 Unix 的 NeXTSTEP 操作系统,并于 1989 年推出。NeXTSTEP 的内核基于 Mach 内核,最初是在卡内基梅隆大学开发的 大学,具有额外的内核层和低级用户空间 源自 BSD 部分的代码。它的图形用户界面是建立的 在使用 Objective-C 的面向对象的 GUI 工具包之上 编程语言。

      iOS(或者 UIKit)于 2008 年发布,比最初的 iPhone 晚一年。

      还有斯威夫特?版本 1 于 2014 年发布。在这个时间点上,我敢打赌(并且可能会赢得赌注)Apple 雇用的 ObjC 编码器比 Swift 多。我什至可以打赌,High Sierra 和 iOS 11 中的所有代码都是用 ObjC 编写的。

      Apple 了解事物的发展速度应该有多慢。在他们宣布从 PowerPC 过渡到英特尔之前几年,他们已经在英特尔芯片上运行了 OS X。几年前,他们在某些地方“使用”了 Swift。他们很有可能正在开发基于 Swift 的 UIKit - 并且已经使用了几年。

      但是商业发布这样一个怪物过渡?可能几年后。特别是考虑到 (1) Swift 的开源特性,(2) 它的快速发展特性,以及 (3) 缺少 ABI - 大约一年后就会推出。

      【讨论】:

      • 切换到 Swift 将提高 Swift 的生产力和速度。使 Xcode 不再需要进行所有这些转换。假设至少 50% 的 Xcode 在 Obj-C 上内部运行,他们将不得不将 Xcode 基本上重写为一个新的应用程序,这需要时间和金钱
      • 你是对的,因为快速更新的 Swift 语言 Apple 可能会在至少未来 5 年内坚持使用 Obj-C 我只是好奇为什么 Apple 在内部使用 Obj-C,而你基本上可以做到使用 Swift,Obj-C 可以做的一切。
      • “基本上用 Swift 做所有 ObjC 能做的事情......” 对 Swift 的工具支持实际上落后了几十年。编译时间显着延长。对语法和标准库的重大更改被视为“业务成本”。 Swift 有很多优点,但它仍然不成熟。
      • 同样,Swift 的 ABI 也不稳定。
      猜你喜欢
      • 2015-05-29
      • 2011-10-28
      • 1970-01-01
      • 2018-06-14
      • 2017-10-14
      • 1970-01-01
      • 2015-09-06
      • 2014-08-19
      • 1970-01-01
      相关资源
      最近更新 更多