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

目录
相关文章
|
2月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
199 2
|
21天前
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
iOS Objective-C 应用连接Azure Storage时,若不关闭账号的匿名访问,程序能正常运行。但关闭匿名访问后,上传到容器时会出现错误:“Public access is not permitted”。解决方法是将创建容器时的公共访问类型从`AZSContainerPublicAccessTypeContainer`改为`AZSContainerPublicAccessTypeOff`,以确保通过授权请求访问。
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
|
2月前
|
缓存 开发工具 iOS开发
优化iOS中Objective-C代码调起支付流程的速度
优化iOS中Objective-C代码调起支付流程的速度
35 2
|
2月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
126 0
|
iOS开发 容器
iOS 代码规范格式 Objective-C(上)
iOS 代码规范格式 Objective-C
397 0
iOS 代码规范格式 Objective-C(上)
|
编译器 API iOS开发
iOS 代码规范格式 Objective-C(下)
iOS 代码规范格式 Objective-C(下)
206 0
|
机器学习/深度学习 API iOS开发
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
160 0
|
存储 自然语言处理 Java
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
231 0
|
Java iOS开发
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(二)
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(二)
123 0
|
存储 安全 C语言
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
175 0