《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射

原创文章,欢迎转载。转载请注明:关东升的博客    

如果引入必要的头文件,在Objective-C语言中可以使用C数据类型。而在Swift语言中是不能直接使用C数据类型,苹果公司为Swift语言提供与C语言相对应数据类型。这些类型主要包括:C语言基本数据类型和指针类型 

C语言基本数据类型

如表所述是Swift数据类型与C语言基本数据类型对应关系表。

 

Swift语言中的这些数据类型与Swift原生的数据类型一样都,本质上都是结构体类型。我们可以他们的构造函数创建这些数据类型的实例。示例代码如下:

 

var intSwift = 80

 

//int

var intNumber  = NSNumber(int: CInt(intSwift))

 

//unsigned char

var unsignedCharNumber  = NSNumber(unsignedChar: CUnsignedChar(intSwift))

 

//unsigned int

var unsignedIntNumber  = NSNumber(unsignedInt: CUnsignedInt(intSwift))   

变量intSwift所存储80Int类型。代码中CInt(intSwift)是实例化CInt类型,它实现了将Int类型转化为C语言int类型,在Swift中使用CInt表示。

代码中CUnsignedChar(intSwift)是将Int类型转化为C语言unsigned char类型,在Swift中使用CUnsignedChar表示。

代码中的CUnsignedInt(intSwift))是将Int类型转化为C语言unsigned int类型,在Swift中使用CUnsignedInt表示。 

C语言指针类型

如表所述是Swift数据类型与C语言指针数据类型对应关系表。

 

从表可见针对C语言多样的指针形式,Swift主要通过提供了三种不安全的泛型指针类型:UnsafePointer<T>UnsafeMutablePointer<T>AutoreleasingUnsafeMutablePointer<T>T是泛型占位符,表示不同的数据类型。另外,还有COpaquePointer类型是Swift中无法表示的C指针类型。

下面我们分别介绍一下。 

1.UnsafePointer<T>

UnsafePointer<T>是一个比较常用的常量指针类型,这种指针对象需要程序员自己手动管理内存,即需要自己申请和释放内存。它一般是由其他的指针创建。它的主要的构造函数有:

  • init(_ other: COpaquePointer)。通过COpaquePointer类型指针创建。

  • init<U>(_ from: UnsafeMutablePointer<U>)。通过UnsafeMutablePointer类型指针创建。

  • init<U>(_ from: UnsafePointer<U>)。通过UnsafePointer类型指针创建。

    UnsafePointer<T>主要的属性:

  • memory。只读属性,它能够访问指针指向的内容。

    UnsafePointer<T>主要的方法:

  • successor() -> UnsafePointer<T>。获得指针指向的下一个内存地址的内容。

  • predecessor() -> UnsafePointer<T>。获得指针指向的上一个内存地址的内容。 

2. UnsafeMutablePointer<T>

UnsafeMutablePointer<T>是一个比较常用的可变指针类型,这种指针对象需要程序员自己手动管理内存,自己负责申请和释放内存。可变指针可以由其他的指针创建,也可以可变指针通过alloc(_:)方法申请内存空间,再调用initialize(_:)方法初始化指针指向数值。当指针对象释放时候需要调用destroy()方法销毁指针指向对象,它是initialize(_:)方法的反向操作,他们两个方法在代码中应该成对出现的。最后还要调用dealloc(_:)方法释放指针指向的内存空间,它是alloc(_:)方法的反向操作,这两个方法在代码中也应该成对出现。 

3. AutoreleasingUnsafeMutablePointer<T>

AutoreleasingUnsafeMutablePointer<T>被称为自动释放指针,在方法或函数中声明为该类型的参数,是输入输出类型的,在调用方法或函数过程中,参数先首先被拷贝到一个无所有权的缓冲区,在方法或函数内使用的这个缓冲区,当方法或函数返回时,缓冲区数据重新写回到参数。

 

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农老关【关东升】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值