码迷,mamicode.com
首页 > 移动开发 > 详细

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记9 Objective-c Compatibility

时间:2015-04-14 11:16:10      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:ios8   swift   paul hegarty   objective-c   

我们都知道在Swift诞生之前进行IOS开发一直使用Objective-c这门语言。OC和Swift之间需要一个桥接。

技术分享

IOS中的API基本都是在许多年前由OC写成的,现在在Swift中也可以用,甚至你都看不出区别,非常自然。有一些特殊的类型,在交接两种语言的时候需要注意,这使得使用OC调用IOS的API的时候会比Swift容易很多。

首先是NSString,这是String以前的形式,在IOS中它与Swift中的String是可以相互转换的,甚至可以当它们没有区别,如果有一个参数需要传一个NSString的值,你可以直接传一个String进去,反之亦然,虽然它们二者是完全不同的,但是你依旧可以把它们当成一回事,在Swift中String甚至都不是一个类,只是一个结构体,这都要归功于苹果的工作人员。

数组的老版本NSArray,桥接到Swift就是AnyObject类型的数组,所以只要你在IOS的API中看到AnyObject类型的数组,说明它们以前都是NSArray。

NSDictionary在Swift中被桥接成键是NSObject得子类对象,而值是AnyObject。

然后Int、Float、Double、Bool都是从NSNumber桥接过来的,NSNumber是OC中所有关于数值的对象,Int、Float、Double这些和C语言中的int、float、double也是桥接好的,所以如果api中有个一c语言的int参数,它也可以接受Swift中的一个Int

技术分享

当然如果你很确定你需要什么数据类型的话,可以做类型转换。比如length是NSString的属性,在String中并不存在,它在String中不存在是有原因的,新的String会处理Unicode长度可变的问题,而老的NSString没有很好的处理这个问题。

字典的桥接规则令人有些迷惑,因为我们常用的键值Sting、Int等根部就不是对象,更不可能是NSObject,但是你依旧可以使用,这是因为数值类型都被桥接到了NSObject的子类中。绝大多数时候你是看不到这种桥接的,因为它们都是自动的。

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记9 Objective-c Compatibility

标签:ios8   swift   paul hegarty   objective-c   

原文地址:http://blog.csdn.net/cg1991130/article/details/45038341

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!