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

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

我们都知道在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的子类中。绝大多数时候你是看不到这种桥接的,因为它们都是自动的。

目录
相关文章
|
4月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
100 2
|
4月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
69 0
|
编译器 API iOS开发
iOS 代码规范格式 Objective-C(下)
iOS 代码规范格式 Objective-C(下)
193 0
|
iOS开发 容器
iOS 代码规范格式 Objective-C(上)
iOS 代码规范格式 Objective-C
384 0
iOS 代码规范格式 Objective-C(上)
|
机器学习/深度学习 API iOS开发
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
141 0
|
存储 自然语言处理 Java
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
218 0
|
Java iOS开发
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(二)
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(二)
116 0
|
存储 安全 C语言
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
162 0
|
iOS开发
【IOS 开发】Objective - C 语法 之 流程控制(二)
【IOS 开发】Objective - C 语法 之 流程控制(二)
141 0
|
iOS开发
【IOS 开发】Objective - C 语法 之 流程控制(一)
【IOS 开发】Objective - C 语法 之 流程控制(一)
126 0