
互用性是让 Swift 和 Objective-C 相接合的一种特性,使你能够在一种语言编写的文件中使用另一种语言。当你准备开始把 Swift 融入到你的开发流程中时,你应该懂得如何利用互用性来重新定义并提高你写 Cocoa 应用的方案。
互用性很重要的一点就是允许你在写 Swift 代码时使用 Objective-C 的 API 接口。当你导入一个 Objective-C 框架后,你可以使用原生的 Swift 语法实例化它的 Class 并且与之交互。
Swift和Objective-C的联系
苹果一直在改进Objective-C,默认编译器由GCC换成了LLVM,并先后加入literal、block、ARC、Module等特性。我认为最大的两点改进为以下两点。
1.ARC+弱引用,本质还是引用计数。但从人手调用retain、release,转成编译器自动插入代码是个质的飞跃。
2.block+GCD,block引入函数式风格的代码块,而GCD则大大简化了异步代码编写方式。
WWDC之后,我开始思考一个问题,苹果为什么不继续改进Objective-C,而发布Swift这门新语言呢?这个问题只有苹果自己知道,其他人只能猜测。
可能的原因有以下几个方面。
1.Swift表面看起来很简单,语法跟流行的C#、JavaScript、C++等语言相似,可以吸引更多的开发者。
2.Objective-C因为需要兼容C,所以限制了它的改进。而Swift没有历史包袱,可以自由采用最新的语言设计研究成果。
3.设计者的个人品位,Chris Lattner不习惯Objective-C的语法,就去设计了一个新的。当然,这是玩笑话,不要太当真。
Swift虽然是新语言,却融合了Objective-C的很多特性。读Swift的文档会发现,Objective-C与Swift的联系十分密切。Objective-C使用的很多底层技术,被应用到Swift中。
Swift与Objective-C共用同一套运行时环境
我们编写程序,让程序运行起来,被机器执行的代码并非全部是由我们自己来编写的。需要同时运行很多预先写好的支持性的代码,才能让我们自己的代码运行起来。程序并非单独存在的,运行时处在一定的环境当中。我总联想到很多小蚂蚁在泥土上面爬,而我自己写的程序只是其中的一只。
Swift跟Objective-C编译出的程序代码运行在同一套运行环境上面。Swift的类型可以桥接到Objective-C的类型,反之亦然。Swift编写的代码可以调用Objective-C编写的代码,反之也一样。
Objective-C之前积累下来的大量类库,实现不用改写Swift就可以直接调用。
同一个工程,可以同时使用Swift和Objective-C
Objective-C在一端,Swift在另一端,两端经中间文件进行桥接。桥接文件包含Objective-C的头文件,编译时自动转成Swift可以识别的形式。Swift就可以使用Objective-C的类和它的函数。
在Swift的类中,加上@objc(类名)的字样,Objective-C也可以使用Swift编写的类。但Swift跟C++的相互调用,需要Objective-C来封装。
总的来说,共同使用Swift和Objective-C/C++还算方便,但已不能将几种语言的代码,混写在同一文件。大概是因为Swfit的语法不像Objective-C那样独特,混写难以将Swift的代码识别出来。
Swift骨子里大多与Objective-C一样
Objective-C出现过的绝大多数概念,比如引用记数、ARC、属性、协议、接口、初始化、扩展类、命名参数、匿名函数等,在Swift中继续有效(可能只是换了个术语)。我自己将Swift看成是Objective-C的一块大大的语法糖,其他人可能有不同感受。
Swift大多数概念与Objective-C一样,也有些概念在Objective-C找不到对应,比如泛型。Swift中将那种操作写一次就可以作用多个类型的语法叫做Generics(泛型)。
编程语言和语法
新语言出来时,总会有种声音认为语言只是工具,他们会觉得重要的是思想,而看轻工具的作用。认为编程语言是工具本身并没有大错,但语言并非普通的工具,而是思维工具,不能忽视语言对思维的影响。编程语言就如同数学符号,数学符号也是种思维工具,好的数学符号会帮助使用者思考,更奇妙的是似乎符号本身也会思考。用0~9这些阿拉伯数字进行计算时会感到一切都很自然,似乎数字本身在计算,而不是人在做计算。
尽管编程语言的语法很重要,但语法背后的概念更重要。当明白语法背后的概念后,从一门语言切换到另一门有着相同概念的语言会很容易。但语法会影响表达,理论上每门语言都可以表达任何概念。不过当某种概念在某门语言中很难表达出来时,我们就会倾向于不使用它,这种概念在那门语言的社区就难以被人熟知。
编程语言用来表达思路,表达起来是否自然是很重要的。最理想的是不多不少、刚刚好,写起来自然,读起来更需要自然。并非功能越多的语言越好,而是应该越能帮助思考,越容易表达思路的语言越好。
Swift背后的概念大多跟Objective-C差不多。但Swift吸收了很多其他语言的语法,同一个概念,写起来比Objective-C简洁得多、自然得多。从表达的角度来说,Swift比Objective-C优秀。
Swift的语法
苹果出了本很不错的语法教程来详细描述Swift的语法。在这里,我们只挑一些有意思的点来讨论。
妻中蜜3全cg存档
游戏工具 / 28KB
下载
1
SimplyCam DXF格式编辑器v2.4.0 绿色版
文件处理 / 2.0M
下载
2
csgo空格键连跳脚本绿色免费版
游戏工具 / 564KB
下载
3
LOL Dsx换肤小助手2016 最新过检测版
游戏工具 / 4KB
下载
4
免费的SQLite3数据管理工具(SQLiteSpy)v1.9.9绿色版
编程软件 / 1.9M
下载
5
魔兽7.2.5塞弗斯的秘密buff监控wa字符串
游戏工具 / 1KB
下载
6
我的世界矿物透视MOD1.6.4-1.8集合版本
游戏工具 / 889KB
下载
7
易控王文档加密软件v2017官方版绿色免费版
文件处理 / 46M
下载
8
DNF9周年第十套天空时装补丁
游戏工具 / 1.6M
下载
9
3456wg多选皮肤v10.6官方版
游戏工具 / 2.2M
下载
10
140.5M / 09-05
立即下载
76.4M / 03-25
立即下载
55M / 06-05
立即下载
237.9M / 04-13
立即下载
900.9M / 03-02
立即下载
96.2M / 07-06
立即下载
311.2M / 07-06
立即下载
335M / 07-06
立即下载
200M / 07-06
立即下载
413.8M / 07-06
立即下载
768.9M / 08-19
立即下载
484.7M / 09-27
立即下载
165.4M / 09-05
立即下载
131.8M / 04-13
立即下载
195.6M / 03-03
立即下载
45.6M / 09-08
立即下载
665.2M / 07-06
立即下载
2.84G / 07-06
立即下载
93M / 07-06
立即下载
338.3M / 07-06
立即下载
892.4M / 08-18
立即下载 312M / 07-30
立即下载 1.38G / 07-26
立即下载 109.8M / 06-03
立即下载 142M / 01-08
立即下载 1.2M / 11-23
立即下载 548.8M / 04-13
立即下载 1.6M / 04-13
立即下载 1.48G / 03-18
立即下载 646.6M / 03-03
立即下载 404M / 08-18
立即下载 110.5M / 09-05
立即下载 33.4M / 09-05
立即下载 60M / 04-29
立即下载 254M / 04-25
立即下载 659M / 04-23
立即下载 1M / 12-26
立即下载 253.4M / 12-08
立即下载 253M / 12-08
立即下载 1.19G / 11-16
立即下载 115.9M / 08-19
立即下载 488.3M / 06-04
立即下载 369M / 09-22
立即下载 181.5M / 09-22
立即下载 201.2M / 09-05
立即下载 248.9M / 12-08
立即下载 248.9M / 12-08
立即下载 100.6M / 03-06
立即下载 148.9M / 03-06
立即下载 1.12G / 07-06
立即下载 126.7M / 02-04
立即下载 1.76G / 09-22
立即下载 1.92G / 04-17
立即下载 201.5M / 04-13
立即下载 7.31G / 07-01
立即下载 94.3M / 07-06
立即下载 2.48G / 07-06
立即下载 7.63G / 07-06
立即下载 1M / 07-06
立即下载 778.1M / 07-06
立即下载 1.30G / 08-19
立即下载 72M / 07-06
立即下载 548.7M / 07-06
立即下载 1.00G / 07-06
立即下载 9.13G / 07-06
立即下载 126.2M / 07-06
立即下载 72M / 07-06
立即下载 105.1M / 07-06
立即下载 132M / 07-06
立即下载 132M / 07-06
立即下载