Swift 类型桥接
前言
- iOS 中的 API 基本都是在许多年前由 OC 写成的,现在通过桥接的方法在 Swift 中可以用,基本看不出区别,非常自然。但是一些特殊的类型,在两种语言进行桥接的时候需要特别注意。
1、NSString 类型
NSString是 Swift 中String类型在 OC 中的形式。1)Swift 1.2
- 弱化了
String和NSString类型的桥接,这为在 Swift 中调用 OC 代码制造了一定的困难,因为大量的 OC 方法都存在NSString类型的参数。
- 弱化了
2)Swift 2.0
String和NSString又能亲密无间的互相传递了。
3)Swift 2.2
可以无缝的使用这两种类型,在需要传入
NSString类型的地方可以直接传入String。func someMethod(nsstr: NSString) {
print(nsstr)
} let str: String = "abc"
someMethod(nsstr: str)
由于
String是比NSString更高级的类型,在需要传入String的场合不能直接传入一个NSString,需要借助as转换类型。func someMethod(str: String) {
print(str)
} let nsstr: NSString = "abc"
someMethod(str: nsstr as String)
4)Swift 3.0
处理桥接的对象时,不管是 Swift 对象转 OC 对象,还是 OC 对象转 Swift 对象,都需要使用
as关键字转化。func someMethod(nsstr: NSString) {
print(nsstr)
} let str: String = "abc"
someMethod(nsstr: str as NSString)
func someMethod(str: String) {
print(str)
} let nsstr: NSString = "abc"
someMethod(str: nsstr as String)
2、NSArry 类型
NSArray是 Swift 中Array类型在 OC 中的形式。1)如果
NSArray中保存的是确定类型的元素,桥接到 Swift 中的Array依旧保存着 OC 类型的对象。2)如果
NSArray没有指定类型,桥接到 Swift 中的是AnyObject类型的数组Array<AnyObject>。- 所以只要在 iOS 的 API 中看到
AnyObject类型的数组,就说明它们以前都是NSArray。 - 使用
Array<AnyObject>需要使用as?或者as!转换成具体类型的数组。
- 所以只要在 iOS 的 API 中看到
3、NSDictionary 类型
NSDictionary是 Swift 中Dictionary类型在 OC 中的形式。1)如果
NSDictionary指定了具体的数据类型,在 Swift 中会被桥接成 OC 对象组成的Dictionary。2)如果
NSDictionary没有指定具体的数据类型,在 Swift 中被桥接成键是NSObject类型、值是AnyObject类型的字典Dictionary<NSObject, AnyObject>。- 在 OC 中
NSObject类型是所有类的基类,但是在 Swift 中没有这种类。 - 由于
NSObject类有一些在 iOS 中的高级特性,因此 Swift 类也可以继承自NSObject类。
- 在 OC 中
4、基本数据类型
在 Swift 中
Int、Float、Double、Bool都是从NSNunber桥接过来的,NSNunber是 OC 中所有关于数值的对象。Int、Float、Double这些和 C 语言中的int、float、double也是桥接好的。
Swift 类型桥接的更多相关文章
- swift 类型.
swift 类型 变量声明 用let来声明常量,用var来声明变量 可以在一行中声明多个常量或者多个变量,用逗号隔开 var x = 0.0, y = 0.0, z = 0.0 类型安全 Swift ...
- Swift: 在Swift中桥接OC文件(自己创建的类文件、第三方库文件)
一.介绍 随着Swift的逐渐成熟,使用swift开发或者混合开发已经成为了一个趋势,本身苹果公司也十分推荐使用Swift这门新语言.目前Swift已经更新到了3.0,估计没有多久4.0就要出来了.那 ...
- 用Swift重写公司OC项目(Day2)--创建OC与Swift的桥接文件,进而调用OC类库
昨天把项目中的图标以及启动转场图片弄好了,那么今天,我们可以开始慢慢进入到程序的编写当中了. 由于swift较新,所以类库还不够完善,但是不用担心,苹果早就出了解决方案,那就是使用桥接文件,通过桥接文 ...
- Swift类型检查与转换
继承会发生在子类和父类中,如图所示,是一系列类的继承关系类图,Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类.这个继承关系类图的具体实现 ...
- Swift—类型检查与转换-备
继承会发生在子类和父类之间,是一系列类的继承关系. 例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类. 这个继承关系类的具体实现代码 ...
- Swift - 类型判断is 与 类型转换as
在Swift中,通常使用is和as操作符来实现类型检查和转换.下面通过样例来演示使用方法,首先定义几个类. 1 2 3 4 5 6 7 8 9 10 11 //基类,人类 class Human{ } ...
- Swift类型推测在可选调用中的小提示
我们知道Swift中协议里也有对应于Objc中的可选方法或计算属性,当然协议必须以@objc伪指令修饰否则不可以哦. 如下示例: @objc protocol Transaction{ fun com ...
- Swift 类型嵌套
1.类型嵌套 Swift 支持类型嵌套,把需要嵌套的类型的定义写在被嵌套的类型的 {} 中. Swift 中的枚举类型可以辅助实现特定的类或者结构体的功能. struct SchoolUniform ...
- swift类型擦除的定义-swift的类型擦除只是一个类型高低阶转换的游戏。
所谓swift的类型擦除是指: moand转换: 通过技术手段(通常是包装器),将具体类型的类型信息擦除掉了,只将类型的(某一个侧面的)抽象信息(通常指的是类型尊从的协议.接口.或基类)暴露出来. A ...
随机推荐
- OPENJDK 源码编译
一.整体编译 我的环境: Ubuntu 16.04 LTS apache-ant-1.8.0-bin.zip 环境变量: export LANG=C export ALT_BOOTDIR=/home/ ...
- Python int 中 add abs 方法
1+1 实际等于1.__add__(1) __abs__ 取绝对值
- linux shell cut 命令
cut命令 cut命令用于从文件或者标准输入中读取内容并截取每一行的特定部分并送到标准输出. 截取的方式有三种:一是按照字符位置,二是按照字节位置,三是使用一个分隔符将一行分割成多个field,并提取 ...
- moodleform -转载于blfshiye
Form API 表单API 文件夹 1.概述 2.亮点 3.使用方法 4.表单元素 4.1 基本表单元素 4.2 定制表单元素 5.经常使用函数 5.1 add_action_buttons($c ...
- 洛谷P1926 小书童—刷题大军【01背包】
题目链接:https://www.luogu.org/problemnew/show/P1926 题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的 ...
- MySql:Table 'database.TABLE_ONE' doesn't exist
1. 问题描述 由于最近使用本地的MySQL奔溃了,在修改管理员密码时,不慎修改错误,导致无法重新写会,甚至按照MySQL官网手册都无法修改正确,遂放弃修改root密码,直接将一个未有数据的纯净版My ...
- BZOJ.2756.[SCOI2012]奇怪的游戏(二分 黑白染色 最大流ISAP)
题目链接 \(Description\) \(Solution\) 这种题当然要黑白染色.. 两种颜色的格子数可能相同,也可能差1.记\(n1/n2\)为黑/白格子数,\(s1/s2\)为黑/白格子权 ...
- prufer序列计数的一些结论
\(prufer\)序列和完全图的生成树一一对应(考虑构造) 完全图的生成树个数为\(n^{n - 2}\) 满足第\(i\)个点的度数为\(d_i\)的生成树为\(\frac{n!}{\prod ( ...
- IE6条件下的bug与常见的bug及其解决方法
1.IE6条件下有双倍的margin 解决办法:给这个浮动元素增加display:inline属性 2. 图片底部有3像素问题 解决办法:display:block;或者vertical-align: ...
- iptables防火墙企业级模板
目前公司业务已大多迁移至内网使用或者使用云主机,防火墙也渐渐不用了,在博客上记录一下,以免以后突然有用却找不到模板了.此防火墙脚本执行时默认清空旧的防火墙规则.放行本地loop网卡,DNS服务,NTF ...