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

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

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

C语言基本数据类型

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

70-1.jpg

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所存储80是Int类型。代码中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语言指针数据类型对应关系表。


71-2.jpg

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 作者:Umberto Raimondi,原文链接,原文日期:2016-04-07译者:shanks;校对:pmst...
    梁杰_numbbbbb阅读 10,805评论 0 20
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 8,829评论 3 44
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,732评论 4 61
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,419评论 30 472
  • 踩着有些泥泞的山间小路,跟着大人,亦趋亦步的随着,偶遇些陡峭,虽并不惊险,心中也不免有些惧怕,想着赶快走过才好,又...
    一碗clock阅读 2,713评论 1 2

友情链接更多精彩内容