《从零开始学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所存储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语言指针数据类型对应关系表。

从表可见针对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_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php
《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射的更多相关文章
- 关东升的《从零開始学Swift》即将出版
大家好: 苹果2015WWDC大会公布了Swift2.0,它较之前的版本号Swift1.x有非常大的变化.所以我即将出版<从零開始学Swift><从零開始学Swift>将在&l ...
- 从零開始学Swift之Hello World进化版
上节课,也就是昨晚啦,我们学习到从零開始学Swift之Hello World.那一节仅仅有一句代码,大家会认为不够过瘾. 那么这节课,就给大家来多点瘾货吧! 先上图! //var 代表变量的类型, s ...
- 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹
<PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...
- 《从零開始学Swift》学习笔记(Day5)——我所知道的标识符和keyword
Swift 2.0学习笔记(Day5)--我所知道的标识符和keyword 原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和keyword,一直没有好好的总结,就是这 ...
- 《从零開始学Swift》学习笔记(Day 1)——我的第一行Swift代码
Swift 2.0学习笔记--我的第一行Swift代码 原创文章,欢迎转载. 转载请注明:关东升的博客 当第一次看到以下代码时我石化了.这些代码是什么东东?单词拼出来的? import Foun ...
- 《从零開始学Swift》学习笔记(Day60)——Core Foundation框架
创文章,欢迎转载.转载请注明:关东升的博客 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.尽管在Swift中调用这样的C语 ...
- 从零開始学android<数据存储(1)SharedPreferences属性文件.三十五.>
在android中有五种保存数据的方法.各自是: Shared Preferences Store private primitive data in key-value pairs. 相应属性的键值 ...
- 从零開始学android<TabHost标签组件.二十九.>
TabHost主要特点是能够在一个窗体中显示多组标签栏的内容,在Android系统之中每一个标签栏就称为一个Tab.而包括这多个标签栏的容器就将其称为TabHost.TabHost类的继承结构例如以下 ...
- 【高德地图API】从零開始学高德JS API(五)路线规划——驾车|公交|步行
先来看两个问题:路线规划与导航有什么差别?步行导航与驾车导航有什么差别? 回答: 1.路线规划,指的是为用户提供3条路线推荐.[高德]在提供路线规划的时候,会提供用户自己定义路线规划功能,这是别家没有 ...
- 第13章、布局Layouts之RelativeLayout相对布局(从零開始学Android)
RelativeLayout相对布局 RelativeLayout是一种相对布局,控件的位置是依照相对位置来计算的,后一个控件在什么位置依赖于前一个控件的基本位置,是布局最经常使用,也是最灵活的一种布 ...
随机推荐
- ajax application/json 的坑
我们习惯使用application/json方式提交,所以会在ajax中指定contentType. $.ajax({ url: "http://localhost:3000", ...
- atitit.新增编辑功能 跟orm的实现 attilax p31
atitit.新增编辑功能 跟orm的实现 attilax p31 1. 流程的实现 1 2. view的实现(dwr) 1 3. 获取表结构 1 4. grep filt req params 2 ...
- [svc]ip routing和no ip routing
ip routing: 查路由表, 如果ping的目的在RT中没有,不发出任何包(arp也不会发出) 如果RT中存在,则arp 下一跳,相当于no ip routing+配置网关 注: 静态路由: 指 ...
- 【Android】14.1 内部文件存储和读取
分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 内部存储(Internal storage)是指将应用程序建立的私有文件保存在内部存储器(移动经销商卖的那种容量较 ...
- Angular+Electron+VSCode的桌面应用
Angular+Electron+VSCode的桌面应用 转自:http://blog.csdn.net/yr7942793/article/details/50986696 第一部分 Electro ...
- 封装locaostorage
const ls = localStorage export default { setItem(name, value) { ls.setItem(name, JSON.stringify(valu ...
- background-origin:规定 background-position 属性相对于什么位置来定位
background-origin:border-box;此时设置background-size:contain; 根据容器的边框定位 例如:容器的盒模型如下:设置了padding:20px;bord ...
- Bootstrap学习笔记(9)--模态框(登录/注册弹框)
说明: 1. 上来一个ul先把登录和注册两个链接扔进去,ul的类nav,navbar-nav是导航条,navbar-right让他固定在右侧.每个li的里面,data-toggle="mod ...
- PHP uxf framework 在模版中加入url标签
1. 确保不修改discuz代码: 2. 继承discuz template类,重载parse_template 方法:由于discuz在模版引擎这一块没有考虑扩展性,对标签的解析全部写在一个方法中, ...
- Trie树 + DFS - CSU 1457 Boggle
Boggle Problem's Link: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1457 Mean: 给定n个串,有m个询问. 每个询问 ...