程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 《從零開始學Swift》學習筆記(Day 71)——Swift與C/C++混合編程之數據類型映射

《從零開始學Swift》學習筆記(Day 71)——Swift與C/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、UnsafeMutablePointer和AutoreleasingUnsafeMutablePointer。T是泛型占位符,表示不同的數據類型。另外,還有COpaquePointer類型是Swift中無法表示的C指針類型。

下面我們分別介紹一下。

1.UnsafePointer

UnsafePointer是一個比較常用的常量指針類型,這種指針對象需要程序員自己手動管理內存,即需要自己申請和釋放內存。它一般是由其他的指針創建。它的主要的構造函數有:

  • init(_ other: COpaquePointer)。通過COpaquePointer類型指針創建。

  • init(_ from: UnsafeMutablePointer)。通過UnsafeMutablePointer類型指針創建。

  • init(_ from: UnsafePointer)。通過UnsafePointer類型指針創建。

    UnsafePointer主要的屬性:

    • memory。只讀屬性,它能夠訪問指針指向的內容。

      UnsafePointer主要的方法:

    • successor() -> UnsafePointer。獲得指針指向的下一個內存地址的內容。

    • predecessor() -> UnsafePointer。獲得指針指向的上一個內存地址的內容。

      2. UnsafeMutablePointer

      UnsafeMutablePointer是一個比較常用的可變指針類型,這種指針對象需要程序員自己手動管理內存,自己負責申請和釋放內存。可變指針可以由其他的指針創建,也可以可變指針通過alloc(_:)方法申請內存空間,再調用initialize(_:)方法初始化指針指向數值。當指針對象釋放時候需要調用destroy()方法銷毀指針指向對象,它是initialize(_:)方法的反向操作,他們兩個方法在代碼中應該成對出現的。最後還要調用dealloc(_:)方法釋放指針指向的內存空間,它是alloc(_:)方法的反向操作,這兩個方法在代碼中也應該成對出現。

      3. AutoreleasingUnsafeMutablePointer

      AutoreleasingUnsafeMutablePointer被稱為自動釋放指針,在方法或函數中聲明為該類型的參數,是輸入輸出類型的,在調用方法或函數過程中,參數先首先被拷貝到一個無所有權的緩沖區,在方法或函數內使用的這個緩沖區,當方法或函數返回時,緩沖區數據重新寫回到參數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved