前言

  • iOS 中的 API 基本都是在许多年前由 OC 写成的,现在通过桥接的方法在 Swift 中可以用,基本看不出区别,非常自然。但是一些特殊的类型,在两种语言进行桥接的时候需要特别注意。

1、NSString 类型

  • NSString 是 Swift 中 String 类型在 OC 中的形式。

  • 1)Swift 1.2

    • 弱化了 StringNSString 类型的桥接,这为在 Swift 中调用 OC 代码制造了一定的困难,因为大量的 OC 方法都存在 NSString 类型的参数。
  • 2)Swift 2.0

    • StringNSString 又能亲密无间的互相传递了。
  • 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 中 IntFloatDoubleBool 都是从 NSNunber 桥接过来的,NSNunber 是 OC 中所有关于数值的对象。

  • IntFloatDouble 这些和 C 语言中的 intfloatdouble 也是桥接好的。

最新文章

  1. 移动web前端下拉刷新效果
  2. 字体在网页中画ICON图标
  3. 单元测试与Nunit的基本使用
  4. 特征的SID表、M表、P表、Q表、X表、Y表、T表
  5. ocruntime
  6. 修改bigbluebutton白板上传中文乱码
  7. 优盘(U 盘) 采用TLC, MLC, SLC芯片 的区别 与使用寿命
  8. java 操作FTP
  9. CentOs下 SVN版本控制的安装(包括yum与非yum)
  10. 获取MySql每一列的数据类型和长度默认值等信息
  11. java中的引用传递问题
  12. 封装ajax原理
  13. Oracle 11g OGG mgr定期清理tail 文件
  14. SoapUI并发模式
  15. jQuery方法区别:click() bind() live() delegate()区别
  16. [C++]PAT乙级1005. 继续(3n+1)猜想 (25/25)
  17. 题解——code[vs] 1506 传话(传递闭包)
  18. stark组件之过滤操作【模仿Django的admin】
  19. ImageGrab.grab()全屏抓取错误
  20. Storm-源码分析-Streaming Grouping (backtype.storm.daemon.executor)

热门文章

  1. jsp+servlet实现文件的上传和下载
  2. POJ 3614 Sunscreen (优先队列)
  3. 3237: [Ahoi2013]连通图 线段树分治
  4. FFT 【JSOI2012】bzoj4332 分零食 (未解决)
  5. CentOS7.5安装nodejs
  6. 文件流 io.StringIo()
  7. symmfony
  8. cglib动态代理导致注解丢失问题及如何修改注解允许被继承
  9. SQL server学习(四)T-SQL编程之事务、索引和视图
  10. Linux成长之路