Swift 2中的指針與Objective-C指針相互傳遞

在SWIFT編程中如果想調用C語言編寫的函數則需要通過橋接文件來實現。在橋接文件中通常使用的OC代碼,在OC中就可以直接操作調用C的函數。

1. 在Swift中讀C指針

下面橋接文件中的方法會返回一個int指針,即C術語裏面的(int *):

@interface PointerBridge : NSObject {  
    int count;  
}  
- (int *) getCountPtr;  
@end  

@implementation PointerBridge  
- (instancetype) init {  
    self = [super init];  
    if(self) {  
        count = 23;  
    }  
    return self;  
}  
- (int *) getCountPtr {  
    return &count;  
}  
@end  

在SWIFT中調用橋接文件時可以通過如下方式獲得int*的內容。

let bridge = PointerBridge()  
let theInt = bridge.getCountPtr()  
print(theInt.memory)  

這裏的theInt.memory得到的值就是23。

2. 在Swift中轉遞C指針給橋接文件

假如oc橋接文件中有如下的一個函數接口

- (void) setCountPtr:(int *)newCountPtr {  
    count = *newCountPtr;  
}  

此時在SWIFT代碼中傳給setCountPtr函數的參數需爲int *類型。在SWIFT中可以通過UnsafeMutablePointer<Int32> 類型來操作。

let bridge = PointerBridge() 
let theInt = bridge.getCountPtr()
print(theInt.memory)  
let newIntPtr = UnsafeMutablePointer<Int32>.alloc(1)  
newIntPtr.memory = 100 
bridge.setCountPtr(newIntPtr) 
print(theInt.memory) // 100  

通過這種方式,bridge中的count就被修改爲了100。需要注意的是給UnsafeMutablePointer<Int32>構造方法傳入的參數是需要分配空間的對象的個數,在這裏只需要一個Int32對象,所以我們傳入1即可。

Reference:
http://www.csdn.net/article/2015-09-07/2825641

發佈了95 篇原創文章 · 獲贊 127 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章