《從零開始學Swift》學習筆記(Day 71)——Swift與C/C++混合編程之數據類型映射

原創文章,歡迎轉載。轉載請註明:關東昇的博客  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所存儲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表示。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_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
 
更多精品iOSCocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php

相關文章
相關標籤/搜索