chipmuck
2019-02-26 14:03:43 +08:00
拿一个我之前的回答,你可以参考一下。
0. 从语言的 logo 谈起。
看看可怜的 Objective-C 发布和修订那么多年了,至今也没有一个像样的 logo 来跟 Swift 这个正统的「官方续作」相提并论(当然这纯属是一个笑话)。所以,我们是不是可以仅从设计良好的「商标」的角度来决定该学习哪一个?(当然这同样是一个玩笑)
1. 现在?
学习客户端语言,讲个套路无非就是语法、设计模式、UI 和项目实例。咱一个个来说,首先语法。无人不知无人不晓,Objective-C 继承自 Smalltalk 的语法,其中的消息发送(也就是方法调用)类似自然语言的叙述方式:长,但清晰明确。很多刚接触 Objective-C 的开发者只是简单地认为,长名称即是冗余、繁复,但细看官方提供的代码样例,其实可以轻易地从中读出某个代码片段或者方法名所代表的含义和作用,甚至在定义方法名称时,你可以跟造句一样,按照句型结构来划分名称结构,反而有种浪漫融入于代码之中。这个例子并不是说 Swift 难以理解,相反,按照 Apple 的宣传文案,Swift 是「人人能编程」活动中极为重要的工具,显然不会设计成一条陡峭的学习曲线,让初学者难以琢磨。恰恰我认为 Swift 这个「包罗万象」的设计结构(优化常见的编译错误、枚举中包含类定义、扩展、泛型等),往往在编程的时候会忽略一些在用 Objective-C 写时经常涉及到的一些问题,比如判空、类型判断等( Swift 对应为 Optional 和 as 语法),少了一些语言的特色也就少了一根技能树的枝叉。
面试呢?目前除了个别公司在 JD 中会标明 Swift 为核心招聘技能以外,绝大多数还是以 Objective-C 为主。
2. 未来
TIOBE 的语言趋势排行准不准?我觉得一定程度上,能反映出当下某种语言或者说某种平台的社区热度,但并不能预知未来的发展趋势。如果按照「众望所归式」的故事走向,Swift 定会一统江湖。但如果不是,看看现在的 Flutter、React Native 等一众跨平台,无论从文档质量、编程环境、社区扶持,都有赶超之势。扯远了,如果从问题的两者挑一个,可预计的未来,还是 Swift 的。
3. 所以,建议?
如果想体验几年前「麻烦」的 MRC 和「顽劣」及不明所以的 Bug,并试着习惯、解决它们,最终积攒经验成为一位大佬,那么就从 Objective-C 学起;
如果为了公司的业务,为了完成手上的任务,最终成为技术部中广为传颂的「 fix 大神」,那么就根据公司项目使用的语言学起;
如果想自己创造一个世界,创造一个属于自己或者服务于社区的东西,那么想必 Swift 是最好的选择。