原创文章,欢迎转载。转载请注明:关东升的博客 php
若是引入必要的头文件,在Objective-C语言中可使用C数据类型。而在Swift语言中是不能直接使用C数据类型,苹果公司为Swift语言提供与C语言相对应数据类型。这些类型主要包括:C语言基本数据类型和指针类型。 java
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表示。spa
C语言指针类型.net
如表所述是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