《Swift基础教程》作者Boisy Pitre:Objective-C很不错,但它已经是过去时

news/2025/3/21 14:27:17

非商业转载请注明作译者、出处,并保留本文的原始链接:http://www.ituring.com.cn/article/203600

Boisy G. Pitre是一位资深苹果开发专家,曾任Siri语音识别技术提供方Nuance公司Mac产品小组的资深软件工程师,参与开发了语音识别软件Dragon Dictate。MacTech杂志“Developer to Developer”月度专栏作家,曾多次在MacTech和CocoaConf等会议上发表技术演讲。现任情绪识别公司Affectiva的移动远景规划师,领导团队致力于将公司的表情分析技术迁移到移动平台。Boisy著有《Swift基础教程》一书。

图片描述

问:你写作《Swift基础教程》的目的是什么?

当苹果引入Swift时,我就知道这门语言会在几年之内成为计算机语言版图中的重要一块。我的目标是以有趣而轻松的方式向读者们介绍这门新语言,让读者们抢先起步,并在之后的学习中迅速加速。写作这本书很具有挑战性,因为这门语言可以讨论的东西实在是太多了,而我不想让读者们感到不知所措。这本书是我为初学者设计的,从这个角度上说,这本书很成功。

问:你能否向读者们介绍一下你在Affectiva从事的工作?

当然。Affectiva是一家在数字体验中引入情绪智力的科技公司。我们的技术根据实时面部分析来判断一个人的情绪状态。我是这家公司的移动远景规划师,我的责任是把技术和移动世界连接起来。我们已经实现了这个目标,而我现在正在努力提高移动平台的技术,这些平台包括iOS和Android。我们有一个可以供开发者使用的SDK,用于把情绪智能整合到他们的应用中。

问:在你看来,开源Swift会改变iOS的生态环境以及iOS和Android之间的关系吗?

很难预测作为开源语言的Swift会如何影响Android开发。Google在语言初创方面有Go语言,它对于Android来说就像是Swift之于iOS。我期待会有人用Swift写Android应用,就像是有人用Go写iOS应用一样。一种语言会比另一种语言更成功吗?各自平台的语言会依附在它们本来的平台上吗?只有时间能告诉我们。但是话说回来,苹果开源Swift语言的决定肯定会让各种变化朝更好的方向发展。

问:Swift从其他语言中整合了哪些特性?其中你最喜欢的特性是什么?

所有计算机语言都会从其他语言身上借鉴一些东西。对于Swift来说也是如此。从语法和存储模型的角度上说,我在Swift上能看到很多Rust的影子。很明显,Swift对于安全的强调使其与C和C++保持了一定距离,所以它们之间的共同点比较少。我相信苹果很努力想让Swift遵从自己的主张,成为自己的语言。对于未来,我们拭目以待。

到目前为止,我最喜欢的Swift特性是语法的清晰度。用关键字‘let’建立一个常量变量,和用关键字‘var’建立一个可变变量相比,很大程度上简化了C/C++风格的语法。用执行命名参数可以清晰地写函数(如Objective-C),而创建和使用闭包也变得更简单。

问:Swift在未来有可能会取代Objective-C吗?

当然。但是没人知道会用多长时间,但是我认为应该是在5年之内。我们很容易就忘记计算机语言的生命有多长(现在C语言已经40岁了)。Objective-C不会彻底消失,但是我能预见在未来的某一个时刻,它在语言世界中的份额将变得非常小。

问:iOS中的很多应用框架都还是Objective-C的,目前调用的方式是使用桥接头文件,今后的调用是否有可能变为更加简洁的方式?未来是否会出现更多基于Swift的框架?

几乎可以肯定是这样的,而且我相信苹果正在努力实现这件事。但是我们得记住,这是一个艰巨的任务,需要转换的框架可不在少数。但是我相信这些工作不会花费太久的时间,而且我们很快就会看到专属于Swift的新框架,这样的框架在Objective-C中甚至都找不到同类。这种情况的发生肯定会对Objective-C的后续使用造成很大的影响。

问:你建议初学者应该先学Objective-C还是Swift?

肯定是Swift。Objective-C是一门很不错的语言,但是它带有C语言的遗留问题和包袱。对于编写应用来说,Objective-C在未来会变得越来越脱节。事实上,我现在不会用Objective-C来开启任何一个新的iOS或OS X项目。对于新项目来说我只使用Swift来开发。

问:对于已经掌握一两门编程语言的程序员来说,你认为他们怎样才能快速有效地学习一门新语言?

这取决于已有的一两种语言是什么。如果这两种语言是Objective-C和Swift,或者C和C++,或者其中任何组合,为了挑战思维,我会推荐你学习一种完全不同的语言。像C, C++, Objective-C,以及Swift这样的命令式语言都遵循着相同的模型,所以要学习同类语言很简单。你一定要让自己多接触不同的语言泛型,所以我会推荐你学一种函数式语言,比如Scheme。虽然你不会用这种语言来写应用,但是它会全面打开你对计算机语言的理解。

问:在学习编程语言的过程中,你认为什么时候接触大量的库和API比较合适?对于某个平台的开发者来说,他有必要掌握所有可能用到的API吗?

我经常会用木匠的工具腰带做类比。他的腰带中会装有所有想象得到的工具吗?不……只有那些经常使用的工具。当他需要特殊工具的时候,他会走到他的卡车前,打开放在里面的大工具箱,然后使用某种工具一次到两次,然后把它放起来。

对于编程语言和API来说也是如此。你无法完整地了解所有API,但是你知道得越多,你就越能更好地解决问题。我会建议你先比较完整地学习一门语言,然后再继续研究这种语言的细微之处,也就是开始接触这门语言中可以用来创建有用应用的框架和API。然后你可以每周一次,选择一个新的API,投入3-5个小时来学习它的功能。你可能并不会经常使用这个API,但是你知道它就在那,当遇到适当的时机时,你就会准备好用它来完成特定的任务了。

问:对于一位iOS开发专家来说,他的知识框架是什么样的?

一个全面的iOS专家必须掌握这四样东西:

  • (1) 用来写应用的语言(Swift / Objective-C);

  • (2) 对创建软件的工具的控制(Xcode);

  • (3) 关于iOS应用基础框架和API的强大知识储备;

  • (4) 鉴别好的UI设计的能力。

要经历很多应用和上百小时的编程才能达到这个水平。每个应用都会带来自身的要求和需要的API,所以你写的应用越多,就能越广地接触到各式苹果框架的,而你的UI设计技巧也会越来越好。


更多精彩,加入图灵访谈微信!

图片描述


https://dhexx.cn/news/show-1297274.html

相关文章

补偿性事务_管理个人和团队补偿的可能性

补偿性事务关于如何管理团队薪酬的推特对话。 我们如何才能向人们支付他们的价值,并为他们的价值补偿团队? 我知道有些团队中我很有价值-不是因为我是“领导者”,而是因为我帮助团队实现了目标。 而且,有些团队我没有那么有价值。…

PHP魔术方法和魔术常量介绍及使用

魔术方法(Magic methods) PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用。 魔术方法包括: __construct(),类的构造函数__destruct(),类的析构函数__call(),在对象中调用一个不可访…

敏捷管理方法_敏捷方法需要管理文化变革

敏捷管理方法罗恩杰弗里斯(Ron Jeffries),马特巴康布(Matt Barcomb)和其他一些人写了一个有趣的话题,涉及基于团队的敏捷性的规定性和非规定性方法 。 这些问题是细微的,对我而言 ,请…

android dp 和 px 的相互转换

在开发中,可能须要动态设置控件的大小 比如为一个gridview设置宽度: LinearLayout.LayoutParams linearParams2 (LinearLayout.LayoutParams)head_gridView.getLayoutParams();int realwidth Utils.Dp2Px(context, 32);linearParams2.width(headAdapter.getCount())*(realwid…

用getIdentifier()获取资源Id

2019独角兽企业重金招聘Python工程师标准>>> 做项目过程中遇到一个问题,从数据库里读取图片名称,然后调用图片。直接用R.drawable.?无法调用。查了好多地方最后找到了个方法,分享给大家,希望有帮助。 主要由两种方法…

中断:Access violation(访问破坏,即段错误)

为什么80%的码农都做不了架构师?>>> 复杂的类(例如QComboBox)是不支持使用memcpy来拷贝的,所以需要根据实际情况来正确编写拷贝构造函数或重载“”赋值操作符。 转载于:https://my.oschina.net/qtplus/blog/749824

敏捷思想_将“很少”的思想应用于敏捷管理控制

敏捷思想我遇到的大多数经理都希望做得很好。 他们希望为从事这项工作的人们提供愿景。 他们希望在人们需要时提供指导。 他们想知道人们可以交付组织需要和经理想要的结果。 随着他们的组织采用敏捷方法,这些经理会遇到问题:他们的组织(高于…

不得不学的js技巧之关键字this

JavaScript的初学者,很容易迷惑于函数中的this关键字,本文简明扼要地说明了this的含义,包你读后不再迷惑。 一句话解决疑问:函数中的this代表一个对象,具体是哪个对象取决于函数的调用方式。 好的,现在问题…

go 带命名的并发安全库

为什么80%的码农都做不了架构师?>>> https://github.com/lujinda/go-locker 转载于:https://my.oschina.net/tuxpy/blog/886491

安装percona-xtrabackup-2.2.10-1.el5.i386.rpm出错

错误代码: warning: percona-xtrabackup-2.2.10-1.el5.i386.rpm: Header V4 DSA signature: NOKEY, key ID cd2efd2aerror: Failed dependencies:perl(DBD::mysql) is needed by percona-xtrabackup-2.2.10-1.el5.i386错误原因:缺少依赖的包解决方法:# yum -y install perl-DB…