Paris Buttfield-Addison是Secret Lab的联合创始人、移动应用工程师,以及游戏设计师。Secret Lab是一家游戏开发公司,他们致力于使技术变得简单又有趣。Paris拥有计算学博士学位,同时也是一位历史学士。他之前作为产品经理为硅谷的Meebo公司工作,这家公司在2012年被Google收购。他撰写了一系列关于iOS和游戏开发的技术书,其中包括《学习Objective-C与Cocoa框架》,《iOS游戏开发攻略》,《Swift与Cocoa框架开发》,以及《Unity移动游戏开发》。
问:作为一位历史专业的学士,你是怎么变成一位iOS高手以及游戏开发专家的?
除了学习中世纪历史外,我还有其他几个计算专业的学位(荣誉学位以及博士学位)。我发现学习历史的背景让我对科技的理解和很多人都不一样,我认为历史很有趣。
问:在Swift 2.0之后,《Swift与Cocoa框架开发》这本书是否过时?书中有没有哪些地方需要修改?
Swift 2.0有一些语法变化,但是这门语言的哲学却没有任何改变。《Swift与Cocoa框架开发》仍然很有用,如果出现任何过时的地方——我们会发布一个针对这本书的变更日志,当你用Swift 2.0进行编程时,这份日志会告诉你有哪些地方和印在书中的代码不同,我们会在不久之后把这份变更日志发布在我们的博客上(http://secretlab.com.au/blog/| e9b49d8ef7816e77c1d19efe698550cb6 |)。同时我们也在筹备另外一本书,叫做《学习Swift》,这本书是***的,并且覆盖了Swift 2.0的内容。
问:在你看来,开源会对Swift的生态环境以及它和Android的关系造成什么影响?
我认为变化不会太大。上一个苹果开发者语言Objective-C在iOS出现之前是非常晦涩的,而Swift吸取了很多经验。我认为,如果说开源Swift会带来任何变化的话,那就是人们可能会开始用Swift来写服务器软件,这样Swift就会形成一个更大、更好的社区。
我不认为这件事对于iOS和Android的关系会造成影响;现在来看,Java是一种很老的语言,甚至可以说是一种遗留语言,而Swift是现代的。如果Google把Android环境更新为现代化的语言(比如Swift)会是一件很酷的事——事实上,Google已经有了一种现代语言(Go),只是现在还没把它用在Android上!
问:Swift从其他语言那里吸取了哪些成分?你最喜欢Swift的哪些特性?
Swift从Rust和Python这样的语言中借鉴了很多东西。我最喜欢的Swift特性是它在内在安全性方面做出的努力;要想用Swift犯错并不容易,因为它强制执行了很多“优秀风格”。
Swift的设计初衷就是成为一门安全的语言。C语言中的许多缺陷(比如意外使用null指针)都很难在Swift中遇到。Swift非常重视强类型化,除了一些极为特殊的情况之外,它是不允许对象为null的。
问:为什么很多公司还没在生产环境中应用Swift?
因为Swift是崭新的,而且正在经历改变。Swift 2.0已经发布,我怀疑(但无法确定)苹果不会再改动很多了,这就意味着Swift会被更多移动开发者用在他们的产品应用中。就像比特代码一样,App Store自己会为下载或购买应用的用户编译和连接应用,所以可以说Swift对于未来应用来说是至关重要的。
问:Swift在未来会彻底取代Objective-C吗?你建议初学者先学Objective-C还是先学Swift?
对于我们来说Swift已经完全取代Objective-C了!对于真正的开发者来说,这种替代随时都可能发生。这是重要的一步。对于初学者来说,现在已经没有必要再去学Objective-C了!
Objective-C曾经是一门功能非常强大的语言。它与C++的主要区别是它是一种动态语言。在任何一门面向对象的语言中,都需要将函数绑定到它们处理的具体数据,而这一绑定要么在编译代码时进行,要么在运行时进行。C++使用静态绑定,这会提高运行时性能,但降低了灵活性。Objective-C采用动态绑定,它要稍慢一些,但大大增强了语言的灵活性。
然而,Objective-C也有自己的问题。因为它是以C语言为基础的,所以它从父语言那里继承了大量古怪的特性,比如预处理器和指针运算。这些功能尽管非常强大,但会降低代码的可读性和安全性。苹果公司在保持Objective-C的现代化方面做得非常出色,但即使是这门语言的死忠粉也认为这门语言有些过时了。
于是Swift应运而生了。Swift是一门新的语言,旨在让iOS和Mac应用程序的开发变得更轻松、更快速、更安全。它的设计目标是更容易掌握,且在防范程序员错误方面比Objective-C做得更好;事实上,苹果公司将它描述为“没有C的Objective-C”。因为Swift是用LLVM(Objective-C使用的工具集)生成和编译的,而且使用了Objective-C运行时,所以我们可以编写一个同时使用C、Objective-C和Swift的App。
问:在学习Swift之前,是否有必要学习C语言?
不需要!你可以把Swift作为开始,这是一种伟大、有趣、简单,而且安全的语言。当你想要理解程序的内在工作方式时,你可以稍后再学习C语言。
问:一位iOS开发高手需要掌握什么样的知识框架?
我也会做很多设计——构建好的移动应用(或者现今任何形式的应用)需要好的设计感!学习设计吧,因为设计能够更好地影响他人。