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

目录
相关文章
|
JavaScript C++ iOS开发
Objective-C 入门笔记
简介 建立在C语言之上,可以混编C/C++代码,编写一个类需要二个文件: .h的头文件 .m的实现文件(如果是C/C++混编文件,文件后缀为.mm) 既然有头文件,所以很多人会拿它与C++进行类比,它最重要的三个特性是:Message、Category、Protocol,与C++类比,二者之...
930 0
|
前端开发 API
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记4 MVC enum Tuple Dictionary
 回顾一下我们上一话中的代码: @IBAction func operate(sender: UIButton) { let operation = sender.
773 0
|
前端开发 iOS开发
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记3 Xcode、Auto Layout及MVC
   继续上一话中的计算器Demo,上一话讲到类必须被初始化,类中的属性也必须被初始化,所以你不能只声明而不给它一个处置,那么问题来了,我们从storyboard中拖拽的@IBOutlet为什么只有声明而不需要初始化呢,这是因为它的类型依旧是一个optional,在你初始化之前已经被赋值为nil了,这也就是为什么你不需要再初始化它的原因。
846 0
|
Unix iOS开发
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
  首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发。
1025 0
|
6天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
116 3
|
6天前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
128 2
|
6天前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
48 0
|
6天前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
43 3
|
6天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
6天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
39 0