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

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

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



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 编程语言需要花多少时间精力?



学习一个新的编程语言当然不会吓到任何一个 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 的运行速度很快,但真的有那么快吗?之后在各个博客页上和 StackOverflow 出现了对比,用 Swift 构建各种产品。在现实情况下用 Swift 创建 App 的时候,其表现和 Objective-C 有哪些区别呢?随着时间的推移,Swift 可能会更快,但我没那么多时间去等。

Swift 一直在不断的改进

Swift 知道自己的目标,但是没什么可以击败自己老大哥 Objective-C 这么多年的经验。如果你想要添加 C++ 代码到一个 iOS App里面,你还得了解 Objective-C。
  • 大小: 17.1 KB
  • 大小: 14.1 KB
来自: CSDN
1
0
评论 共 1 条 请登录后发表评论
1 楼 zwlfyl 2014-10-16 05:24
i don't think so

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • iOS 快速从 Objective-C 过渡到 Swift:从理论到实践 - Objective-C 和 Swift 的混合编程

    在将项目从 Objective-C 迁移到 Swift 的过程中,可以逐步将 Objective-C 代码转换为 Swift,或者选择保留一部分 Objective-C 代码,并与新的 Swift 代码进行混合编程。Objective-C 和 Swift 之间的混合编程可以通过...

  • 毕业设计电商网站源码-iOS:iOS开发者Swift/Objective-C技能

    ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的一个框架 ReactiveCocoa是做什么的? ReactiveCocoa 的作用; 在我们iOS开发过程中,当某些事件响应的时候,需要处理某些业务逻辑,这些事件都用...

  • 盘点一些iOS开发技巧:Swift和Objective-C

    在这短短的一年中(有关APP的开发)发生了如此多的变化:在充满吸引力的Swift面前,我们几乎忘了之前是如何痴迷于Objective-C;以及充满想象力的iOS8和WatchKit,难以想象还有什么API能与之相比。NSHipster的惯例:...

  • Swift 与 Objective-C:您应该为下一个 iOS 移动应用选择哪个?

    2014 年,Apple 推出了一种更简单的新方法来构建 iOS 应用程序 - Swift。然而,在 2020 年,IT 经理和 CTO 仍然难以在 Objective-C 和 Swift 之间做出选择。为了消除任何疑问,我们比较了它们并准备了本指南。 什么...

  • iOS开发者知识普及,Swift 挑战 Objective-C,谁会笑到最后?

    **前言:**目前全球共有超过 7 亿台 iPhone 处于活跃状态,全球约有2000万名 iOS 开发者,这造就了 iOS 作为全球第二大移动设备平台的状态。 虽然安卓系统的全球市场占有率超过 iOS 系统,但在诸如美国、法国和英国...

  • Swift 能不能取代 Objective-C?

    其实到现在为止 Swift 离替代 Objective-C 还是很遥远,因为 Apple 内部一直在用 Objective-C 来做一些 Framework 的开发,低层也不可能...首先我们先去探究一下为什么苹果会选择 Objective-C 作为官方开发语言?...

  • Objective-C语言学习路径及各阶段实例

    随着学习的深入,了解Swift语言也是必要的,因为自iOS 8以来,Swift逐渐成为Apple平台上的主流开发语言,而Objective-C在现有项目中仍然大量存在。同时,熟悉Cocoa Touch库对于iOS应用开发者至关重要。

  • iOS开发者知识普及,Swift 挑战 Objective-C,谁会笑到最后? ...

    **前言:**目前全球共有超过 7 亿台 iPhone 处于活跃状态,全球约有2000万名 iOS 开发者,这造就了 iOS 作为全球第二大移动设备平台的状态。 虽然安卓系统的全球市场占有率超过 iOS 系统,但在诸如美国、法国和英国...

  • Swift与Objective-C的异同

    但对于已经存在的Objective-C项目,或者需要与Objective-C库进行交互的情况,Swift提供了良好的兼容性。由于Swift是苹果推出的较新的语言,与Objective-C相比,它在一些方面具有更好的语言特性和更先进的功能。在...

  • iOS开发应该选择Objective-C还是Swift

    iOS开发应该选择Objective-C还是Swift,这里会给出你选择:1.如果你想成为一个iOS开发者,你仍然需要学习Objective-C。2.Objective-C比Swift更容易学习。3.一旦你学习了Objective-C,学习Swift就很容易了。

  • Objective-C和Swift的区别是什么?

    Swift是2013年苹果发布的一种新的iOS开发语言,其目的在于替代复杂的Objective-C。Swift的设计借鉴了目前比较流行的几种开发语言。例如Python、Ruby等,使得Swift用起来非常简单、快捷,它比Objective-C的学习成本更...

  • 同时使用Swift和Objective-C,怎么做?

    Swift 与 Objective-C 的兼容能力使你可以在同一个工程中同时使用两种语言。你可以用这种叫做&nbsp;mix and match&nbsp;的特性来开发基于混合语言的应用,可以用 Swfit 的最新特性实现应用的一部分功能,并无缝地...

  • Swift与Objective-C和Cocoa混合编程的基本设置!

    重要事项:这篇文章初步介绍了在开发中用到的 API 或技术。苹果公司提供这些信息来帮助您规划本文所说明...在 Swift 中,你可以使用 Objective-C 的 API(包括系统框架和你自定义的代码),你也可以在 Objective-C中 ..

  • iOS 友盟统计的 Objective-C 和 Swift 混编

    在本文中,我们将探讨如何在 Objective-C 和 Swift 混编的项目中集成友盟统计。首先,我们需要在项目中集成友盟统计的 SDK。假设我们已经成功导入了友盟统计的 SDK,并在项目中进行了配置。在实际开发中,我们可以...

  • 《基于YOLOv8的八段锦练习指导系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

  • 大语言模型教育应用中的知识冲突挑战与应对策略

    内容概要:本文详细探讨了大语言模型(LLMs)在教育应用中遇到的知识冲突问题,包括概念定义、事实陈述和逻辑推理层面的认知不一致性。文章分析了知识冲突的技术成因,如训练数据噪声、参数化知识表示的局限、推理机制的缺陷、模型架构的不足及外部知识的偏差,并探讨了这些因素对教育应用的深远影响。文中提出了多维度的解决路径,如通过数据增强优化知识表示、利用提示强化上下文连贯、开发量规完善模型评估等。此外,文章从社会文化的宏观视角剖析了知识冲突的外部驱动因素,探讨如何在多元异质、动态演进的社会建构语境中构建开放进取、兼容融通的智能教育应用体系。 适合人群:从事教育技术研究的学者、教育工作者、人工智能研究人员和技术开发者。 使用场景及目标:①帮助教育工作者理解大语言模型在教育应用中的局限性;②为技术人员提供优化大语言模型教育应用的具体策略;③促进教育人工智能技术的可靠性、适应性和普及性提升。 其他说明:文章强调了知识冲突的有效化解不仅能够提升大语言模型在教育场景中的应用价值,还将为人工智能在更广泛领域的可持续发展奠定坚实基础。

  • 《基于YOLOv8的家具鉴定系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

  • 数据结构day1-思维导图顺序表

    数据结构day1-思维导图顺序表

  • STM32超声波红外避障小车

    STM32超声波红外避障小车项目通过STM32微控制器实现自动避障功能。硬件部分主要包括STM32开发板、超声波传感器、红外传感器、直流电机、电池模块和电机驱动模块。超声波传感器用于测量前方障碍物的距离,红外传感器帮助小车检测地面线路或障碍物。电机驱动模块通过STM32控制直流电机的转动,从而实现小车的前进、后退和转向。 在软件方面,STM32通过编写简单的避障算法,实时读取传感器数据,并根据环境信息控制小车的运动。当超声波传感器检测到障碍物时,系统会触发后退或转向操作,避免碰撞。

Global site tag (gtag.js) - Google Analytics