欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

有了Swift,iOS开发者为何仍需掌握Objective-C?

程序员文章站 2022-03-09 23:11:03
...
我记得很清楚,在 WWDC 2014 大会上,Apple 第一次宣布了一个为 iOS 准备的叫做 Swift 的新的编程语言。估计当时的参会者大多数都会有这样的想法在大脑里闪过:
  • 等等,这是虾米?
  • 天啊,我一直喜爱 Objective-C,但现在开始要学习一个新的语言了?
  • 这是为iOS 8构建App的唯一方式?

之前有人问过这样的问题:对于初学者,Objective-C 和 Swift,你推荐先学哪一个?

真正从长远角度来看,学习 Objective-C 还是 Swift 语言其实很不重要。

有了Swift,iOS开发者为何仍需掌握Objective-C?

Swift 刚发布的时候有人说“这下所有人都回到零起点了”,实际上是外行的一个常见的误解。Swift / Objective-C 和 iOS 开发是两个不同的概念,前者仅仅是一门编程语言,而后者则包括了编程思想、Cocoa 框架的使用,甚至交互设计规范、界面设计规范等 iOS 开发所需的一整套东西,并且绝大部分是和语言无关的。从学习的角度看,大部分时间你将花在学习 后者上,而具体语言和语法只占很小的比例。Objective-C 和 Swift 虽然语法上差异很大,但是背后的思想以及所依托的类库都是相同的。关于 iOS 应用开发你能想到的绝大多数问题,例如:
  • 一个应用的代码是从哪里开始执行的?
  • 如何建立一个按钮,并实现用户点击这个按钮之后调用一个函数?
  • 如何修改一个标签的文字?
  • 如何控制系统发出声音或者播放视频?
  • 如何检测设备的朝向?
它们的答案都取决于Cocoa框架如何使用,而非具体采用的语言是什么——你关注的应该是背后的“我该做什么,为什么要这么做”,而不是简单的“具体怎么去写”——不同语言仅仅是一个写法不同而已,手册和网络上都可以查到,用多了自然掌握。
因此,对于一个已经掌握了 Objective-C 和 iOS 开发的人,迁移到 Swift 是几天就可以搞定的;而对于一个掌握了 Swift 和 iOS 开发的人,迁移到 Objective-C 也不会很困难。
至于选择哪个语言,我想说 Swift 代替 Objective-C 肯定是有原因的,必须承认 Objective-C 的很多语法的确很怪很繁杂(Objective-C 的啰嗦是出了名的),可能对编程语言的初学者不太友好,Swift 接受起来会稍微容易一些。但另一个事实是,目前 Swift 的文档、教程和代码还比较少,并且大部分都是关于语法的。虽然有一两个官方文档是关于如何从 Objective-C 切换到 Swift 的,也有一些 Swift 的示例代码,但和 iOS 开发这个庞大的体系比起来,覆盖面仍然很窄。这对于已经掌握 Objective-C 的开发者不是问题,但是对于什么都不会的初学者,看过 Swift 的文档之后能写一个类似 C 的控制台应用程序出来,但是很难写一个你自己想要的完整可用的 iOS App 出来。因此,基于你的情况,我还是倾向于推荐从 Objective-C 开始学起。

有 Objective-C 开发经验的开发者说

Apple 很快就将大部分的开发者聚集到一起,正如它很绅士的向大家介绍 Swift 并回答所有疑问那样。Apple 向外承诺说,iOS 开发者使用 Swift 一定能从一个现代语言里获得很多好处,包括像强类型化、类型推理、通用术语等等。这些功能都是 Objective-C 开发者一直感兴趣的东西,但是有学习 Swift 编程语言需要花多少时间精力?

有了Swift,iOS开发者为何仍需掌握Objective-C?

学习一个新的编程语言当然不会吓到任何一个 Objective-C 开发者,但也并是说 Swift 里面的所有新的功能都很有吸引力的,更何况,Objective-C 在2008年3月6号就开始被用来构建 iPhone OS 里的移动App了。
上面所说到的都是有经验的开发者,那么对于没有 Objective-C 开发经验的开发者来说,他们对这个新的编程语言是什么态度呢?
  • 真走运,可以避开 Objective-C 的折磨了。
  • 只是一个 .swift 文件,没有标题或实现文件!太棒了!
  • 插入语的山寨版大全终于要出来了。

这些新手也许话里话外都是在谈论 Swift,最关键的是他们都很庆幸 Swift 终于可以在不久的将来完全替代相对复杂难懂的 Objective-C 了。

Swift 开发者说

下面这些是多维数组的 Objective-C 代码片段,用Xcode输出窗口展示出来的数值:
#import <Foundation/Foundation.h>

int main()
{
 /* an array with 5 rows and 2 columns*/
 int a[5][2]-{{0,0},{1,2},{2,4},{3,6},{4,8}};
 int i,j;
 
 /* output each array element's value*/
 for(i=0;i<5;i++)
 {
   for(j=0;j<2;j++)
    {
       NSLOG(@"a[%d][%d]=%d\n",i,j,a[i][j]);
     }
     return 0;
  }
}

不知道你有没有看到什么熟悉的东西,‘i’ 和 ‘j’ 代表的含义,还有循环。但是接下来的 ‘a’ 代表什么,或者 NSLog 是什么样的语法?估计没人想要写这样的代码,不管我们想要得到什么,至少这就是我们暂时想要看到的。

Swift 发布之后,我为什么还要学习 Objective-C?

要想回答这个问题,就得先解决这些问题。调试一个麻烦的 bug。
你之前有在任何移动商店构建和发布过App吗?如果有的话,你肯定在开发过程中遇到过较为严重的bug 吧。反正我是遇到过的,大多数 bug 都是比较难缠的。无论你使用的是 Swift 还是 Objective-C来编写App,底层框架都是用 Objective-C 写的。缺陷深度的执行堆栈需要超过知识迅速的语言。要是在执行栈里遇到 bug 的话,必须对 Swift 语言相当了解才能将其解决。
我之前就用 Swift 编写过一个App,同时遇到了一个用于显示数据的 TableView 上出现的问题,虽说这是一个不太复杂的问题,可是在我做了“优秀开发者”做的解决方案之后,还是没办法解决。然后在 Google 上寻找答案,虽然方法有很多,但是都只支持 Objective-C 代码。不知道要多久才能出现包括 Swift 在内的解决方案?但是我们知道目前的开发者社区里 Objective-C 是通用语言。

iOS 开发者社区的通用语言是 Objective-C

历史告诉我们,过渡是需要时间的。然而这个过渡时间需要多长,谁都说不准!在自动引用计数(ARC)发布之前,当看到‘release’和‘retain’的时候都会畏缩一阵子。在 Apple 发布一个过渡指导之后,开发者开始代替使用手动引用计数。
AutoLayout 怎么样?很多开发这一开始的时候抱着试试看的态度使用,结果并没有达到自己想要的效果,所以他们只能放弃,“等到下一个 Xcode 版本出来的时候再试试吧!”

Demo Code != Production Code

在 WWDC keynote 上面我们看到 Swift 的运行速度很快,但真的有那么快吗?之后在各个博客页上和 * 出现了对比,用 Swift 构建各种产品。在现实情况下用 Swift 创建 App 的时候,其表现和 Objective-C 有哪些区别呢?随着时间的推移,Swift 可能会更快,但我没那么多时间去等。

Swift 一直在不断的改进

Swift 知道自己的目标,但是没什么可以击败自己老大哥 Objective-C 这么多年的经验。如果你想要添加 C++ 代码到一个 iOS App里面,你还得了解 Objective-C。