前言

  • 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! 转换成具体类型的数组。

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 类。

4、基本数据类型

  • 在 Swift 中 Int、Float、Double、Bool 都是从 NSNunber 桥接过来的,NSNunber 是 OC 中所有关于数值的对象。

  • Int、Float、Double 这些和 C 语言中的 int、float、double 也是桥接好的。

Swift 类型桥接的更多相关文章

  1. swift 类型.

    swift 类型 变量声明 用let来声明常量,用var来声明变量 可以在一行中声明多个常量或者多个变量,用逗号隔开 var x = 0.0, y = 0.0, z = 0.0 类型安全 Swift ...

  2. Swift: 在Swift中桥接OC文件(自己创建的类文件、第三方库文件)

    一.介绍 随着Swift的逐渐成熟,使用swift开发或者混合开发已经成为了一个趋势,本身苹果公司也十分推荐使用Swift这门新语言.目前Swift已经更新到了3.0,估计没有多久4.0就要出来了.那 ...

  3. 用Swift重写公司OC项目(Day2)--创建OC与Swift的桥接文件,进而调用OC类库

    昨天把项目中的图标以及启动转场图片弄好了,那么今天,我们可以开始慢慢进入到程序的编写当中了. 由于swift较新,所以类库还不够完善,但是不用担心,苹果早就出了解决方案,那就是使用桥接文件,通过桥接文 ...

  4. Swift类型检查与转换

    继承会发生在子类和父类中,如图所示,是一系列类的继承关系类图,Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类.这个继承关系类图的具体实现 ...

  5. Swift—类型检查与转换-备

    继承会发生在子类和父类之间,是一系列类的继承关系. 例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类. 这个继承关系类的具体实现代码 ...

  6. Swift - 类型判断is 与 类型转换as

    在Swift中,通常使用is和as操作符来实现类型检查和转换.下面通过样例来演示使用方法,首先定义几个类. 1 2 3 4 5 6 7 8 9 10 11 //基类,人类 class Human{ } ...

  7. Swift类型推测在可选调用中的小提示

    我们知道Swift中协议里也有对应于Objc中的可选方法或计算属性,当然协议必须以@objc伪指令修饰否则不可以哦. 如下示例: @objc protocol Transaction{ fun com ...

  8. Swift 类型嵌套

    1.类型嵌套 Swift 支持类型嵌套,把需要嵌套的类型的定义写在被嵌套的类型的 {} 中. Swift 中的枚举类型可以辅助实现特定的类或者结构体的功能. struct SchoolUniform ...

  9. swift类型擦除的定义-swift的类型擦除只是一个类型高低阶转换的游戏。

    所谓swift的类型擦除是指: moand转换: 通过技术手段(通常是包装器),将具体类型的类型信息擦除掉了,只将类型的(某一个侧面的)抽象信息(通常指的是类型尊从的协议.接口.或基类)暴露出来. A ...

随机推荐

  1. Hibernate的主配置文件hibernate.cfg.xml

    1:Hibernate的主配置文件的名字必须是hibernate.cfg.xml(主要配置文件中主要配置:数据库连接信息,其他参数,映射信息):常用配置查看源码:Hibernate\hibernate ...

  2. Centos7安装OpenLDAP

    https://www.cnblogs.com/zhaijunming5/p/9522756.html

  3. mongosync同步1,oplog同步会读取其他集合同步

    使用mongosync同步数据     注意: 我下面的这个mongodb版本较低(3.2.16), 还可以用这个工具来同步数据.工具不支持更高版本的mongodb了. 使用方法: https://g ...

  4. 【Java】 剑指offer(16) 打印1到最大的n位数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印 ...

  5. 关于BeanUtils.copyProperties() 用法及区别

    这两个类在不同的包下面,而这两个类的copyProperties()方法里面传递的参数赋值是相反的. 例如:a,b为对象BeanUtils.copyProperties(a, b); BeanUtil ...

  6. python爬虫学习(一):BeautifulSoup库基础及一般元素提取方法

    最近在看爬虫相关的东西,一方面是兴趣,另一方面也是借学习爬虫练习python的使用,推荐一个很好的入门教程:中国大学MOOC的<python网络爬虫与信息提取>,是由北京理工的副教授嵩天老 ...

  7. HDU 2844 Coins 【多重背包】(模板)

    <题目连接> 题目大意: 一位同学想要买手表,他有n种硬币,每种硬币已知有num[i]个.已知手表的价钱最多m元,问她用这些钱能够凑出多少种价格来买手表. 解题分析: 很明显,这是一道多重 ...

  8. Codeforces.528D.Fuzzy Search(FFT)

    题目链接 \(Descripiton\) 给出文本串S和模式串T和k,S,T为DNA序列(只含\(A,T,G,C\)).对于S中的每个位置\(i\),只要\(s[i-k]\sim s[i+k]\)中有 ...

  9. 洛谷P1823 音乐会的等待

    To 洛谷.1823 音乐会的等待 题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或 ...

  10. 用单片机控制LED灯(项目)

    #include <reg52.h> #define uchar unsigned char sbit LED_RED = P2^; sbit LED_GREEN = P2^; sbit ...