Objective-C 和 Swift 语言,哪个更容易学习
当我们在赢在路上iOS学习了Swift语言学习课程之后,收到了很多邮件和私信来问自己是否还需要学习C或者Objective-C。此外,人们似乎还在迷惑Swift到底适合iOS开发生态中的哪些部分。通过这篇文章,我希望能扫清你的疑惑并且将你送到正确的学习轨道上。
我应该先学C/Objective-C还是直接学Swift?
这个问题可以问问赢在路上IOS的老师来问问
Swift是一个全新的语言,与Objective-C或C都没有任何关系。我的意思是它们都是编程语言并且遵守一些基础概念和范例,但是你并不需要在学习其中一个之前先学另一个。即使你是编程新手,你也可以学习苹果发布的官方的Swift文档而无需先学Objective-C。
我正在学习Objective-C,我应该转为学Swift吗?
这要试情况而定。如果你把学习iOS当做一个爱好或者出于好奇心才学,那么转到Swift学习上吧。如果你将从事iOS开发视为职业,那么你要知道外面至少有100万个应用都是用Objective-C编写的,Swift于2014年才刚刚发布,所以你将来的职业的app开发仍然很有可能使用Objective-C。所以你需要学习Objective-C来获得一个工作,直到Swift成为标准,这
大概将花费数年时间。同时学习两门语言也将对你有好处。你未来的上司甚至可能会让你来将现存的Objective-C app切换到Swift上。不过我对这个观点有所保留,因为一个应用最重要的部分是它的功能而非它使用的语言,因此重写现有app的做法可能不会流行。
我建议初学者选择Swift是因为它是一种友好的语言,并且感谢playground让它变得容易学会。一旦你学过了Swift,如果将iOS开发视为职业的话,对于学习Objective-C也将更容易理解。
最后,Swift是一种现代语言,如果你学习Swift,意味着也同时做好了面向未来的准备,因为Swift将是新一代的应用所用的语言(包括Apple Watch上的应用)。Swift语言是苹果送给每个人的礼物。世界上还没有5年经验的Swift开发者,但如果你现在开始学习Swift,那么过了5年你就将成为其中一位了。
作为以中国IT培训020教育为领导者赢在路上教育给你的建议是,不管你选择哪一门语言,学习它并且精通它。最后你将发现,只要你学会iOS SDK,使用哪种语言并不是最重要的。并且学了一种语言之后可以很容易的开始学习另一门,最紧要的是,从现在就开始学习。
>Objective-C requires programmers to be explicit. The Swift language lets the compiler do more work for the programmer. This is great—less typing for the programmer, right?—but it means that when you look at a line of code, it won't mean much without a deep understanding of the context in which that line lives. Explicit languages are easier for beginners to understand.

Source: iOS Developers Need to Know Objective-C | Big Nerd Ranch

而另外一边,Ash Furrow 认为 Swift 更容易,Objective-C 太难:

> I read this blog post by Aaron Hillegrass this morning and was immediately disappointed.
There are many things that I disagree with about this article, but there is one in particular that I took offence to. “Objective-C is easier to learn than Swift.” Really? Come on now. That's just silly.
看了几天的 Swift, 对比 Objective-C 个人觉得还是要分情况:
从语言上讲,Swift 比 Objective-C 更简单,但是简单是对于有编程基础的人来讲,它的 syntax 更清楚,简洁,很多程序员看到了真是爱不释手。
从 开发角度上讲,Swift 比 Objective-C 难的多,首先虽然 Swift 出来没几天,出来一堆一堆的教程,但是仔细翻翻讲真正 iOS 或者 OS X 开发的真心没有多少。所以虽然你明白了语言怎么回事,但是真正上手开发,可能就不是想象中的那样了。不过这又得分:
o 对 于已经熟悉 Cocoa, Cocoa touch 开发的开发人员来讲,Swift 还是很容易上手的,Apple 的开发团队在这方面真是下了不少功夫,帮助开发者尽可能的方便的使用 Swift。如果你已经非常熟悉Cocoa, Cocoa touch 的开发环境,各种 Framework,API,你会觉得 Swift 用于开发真的很方便,也容易上手。
o 对于完全不懂 Objective-C 并且没有任何 Cocoa, Cocoa touch 开发经验的人来讲,直接上手学习 Swift 依然会非常困难。语言懂了不顶用,你还要去熟悉各种 API, 熟悉整个Cocoa, Cocoa touch 的开发环境,卡住不懂了,搜一下,全是 Objective-C 的例子,真的会很难受。
结论,如果你已经是使用 Objective-C 的程序员的话,Swift 真的很简单,你可以用很少的时间掌握它,并且直接使用它开发。如果你是初学者的话,Swift 和 Objective-C 对于你来说都会很难,可能 Swift 本身简洁的语言特会让你觉得容易理解,如果你是为了学习立马进行开发的话,Objective-C 相比下会简单很多。你会到更多的学习资源和参考,寻求帮助的时候也能得到更有经验和专业的回答。
Objective C 显然更容易学习,现在的XCode默认打开ARC,几乎不需要手工管理指针资源,除了偶尔要处理一下 weak strong dance ,基本上就是一个“平凡的高级语言”。swift等于是在arc的objc基础上加了类型推导、泛型和运算符重载。这都不是那么容易的东西……

貌似swift还没有异常捕捉?到时候还得死一批人。

觉得这个简单的都是被playground给骗了吧。

swift是类似Haskell那种支持类型推导的强类型静态编译语言。它不但有类型而且看起来挺严格。看看有多少朋友误认为它没有类型或者是动态类型,可以想象一下swift要坑多少人。
作为语言都不是很难上手。框架的熟悉都是要靠练习靠经验,所以请不要觉得学了这个语言本身开发就会很溜。假设没有什么apple script的经验,新学objective c基本没简单到一看就会。若有c或c++背景,objective c也不会巨难无比。大多科班程序员都写过些python啊ruby啊什么的,swift跟一般的scripting language看起来没什么差别,伪代码式样。同时,用法抽象了很多objective c的样式。简单来说就是能写,但是写出来什么呢?又还没有consumer ios8给开发。写出来也不支持。

Swift是一个 strongly typed语言,甚至连(id)之类的灵活玩意都没有,这个我到现在还不是很习惯。一个dictionary同时有int跟float,我想 iterate一下,编译器就疯了。我感觉用swift会有很多难看的downcasting,不过也算是C family的精髓啦(自黑)!

swift的optional value好奇葩,是不是进一步除nil的努力呢?还有,真的没有指针的世界也可以运行的吗?(你看,这是作为C family programmer的偏见)

还有作为新语言,开发环境目前还不佳啊,所以从这点来看学起来不会比ruby容易的。人
家库啊讨论啊社区啊都很成熟了,我要是问一个关于swift的问题是肯定没有人答的。
从语言角度,Swift比OC简单了很多。这就像100元比50元多一样明显。Swift就是为了简化OC的开发才发明出来的,汇集了几乎所有流行语言的优势,用更高效更少更清晰更简洁的代码来完成以前同样的工作。

而从语言环境,就是说相关资料教程和网络讨论来看,OC经过多年积淀自然是资料更多。就目前而言,用Swift完成同样的项目可供查阅的资料和参考的代码还是少很多。但是Swift正式发行可以上架App才几天的时间(写下本文时)。从后续发展来看,必然是Swift的天下:

1、首先,完成同样的功能Swift代码比OC更简洁高效,开发效率更高。
2、其次,Swift运行速度不低于OC,调用的相同的底层。而Apple公布的资料Swift还要更快,估计是编译器也做了更强的优化。
3、第三,苹果的官方支持。很明显,苹果的战略是要将Swift来替换OC,在1、2成立的前提下,苹果不主推OC那就是傻瓜吧。从官方文档来看,苹果已经在努力,一段时间内在官
方资料方面估计将达成OC、Swift并行的情况,类似中VB和C#的文档都是一式两份一样。而更远的未来,Swift将逐渐替换OC。再更远的未来,苹果发布新语言AnyWay。再更远的未来,苹果居然被小米收购了。好吧,后两条纯属虚构。

对于初学者来说,必然选择Swift,更容易学习。想象一下那些在刚推出的时候选择了VB6的人,在Java刚推出的时候选择了Delphi的人。还有,OC让我想到了大学里的Fortran(我不太喜欢,有点老旧怪异)。

而已经掌握OC的开发者,可自行选择是否学习Swift,因为OC至少还会流行5年以上,并在10年内依然被平台支持。然后,新版的iOS99已经不兼容OC了。。。
还是objective-c好学一点吧

- objective-c是更接近机器的语言
objective-c和swift都是要编译成机器码的语言,都不是脚本语言,也不是虚拟机语言。相比swift各种高级的语法特性(类型推断、泛型、函数式语言特性、闭包等等),objective-
c作为一个对C语言的面向对象扩展,功能比较有限,而且完全兼容C,有一点C基础、计算机原理基础的(大部分学计算机的应该都有这个基础)同学,应该很容易理解objective-c的各种语法特性。

- objective-c是非常传统的面向过程和对象的语言
既然是C的扩展,就基本上具有所有面向过程语言的特性,会很自然地用各种控制结构去实现基本的代码逻辑,而且用控制结构是用objective-c时正常的使用模式。
objective-c没有泛型支持,单根继承;这就意味着面向对象的特性也是比较简单的;不需要学习者有太多的高级语言特性的知识,基本的面向对象的概念,控制结构的概念就足够应付学习这门语言。
学swift语言能干什么swift 就不太一样了,如果不懂泛型,最基本的?和!的本质就不能理解。其实Optional类型就是一个类似C#的Nullable<T>的泛型类型。更进一步的,Optional实际上是枚举类型,如果没有接触过类似Haskell这样的函数式语言中的相似的类型,估计理解这样的枚举也要费一番功夫。

-
swift的语法特性很复杂
apple自己官方的文档里,language guide也没有完全覆盖所有的特性,至少有一些讲的非常粗浅,读者很难通过它理解的很深入,也缺乏示例代码片段帮助理解。language reference覆盖的内容更多一些,但是就更加粗浅了。

- swift的很多语法特性在xcode里面还没有实现
举一个例子,截止今天(9.23),class var(相当于类的静态成员变量)还不支持,只能用其他方式模拟,写singleton就要很奇怪的嵌套一个struct类型,把静态成员放在struct里面,然后用一个class func去访问struct里面的静态成员。
而且xcode的编辑器对swift的支持也不是很完善,补全和代码提示功能(SourceKitService)常常崩溃。

- Cocoa库基本上是为Objective-C写的
swift去调用objective-c的cocoa库,看起来怎么都不算非常优雅

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。