// 在 C 中有一類指針剿配,你在頭文件中無法找到具體的定義,只能拿到類型的名字勾栗,而所有的實現(xiàn)細節(jié)都是隱藏的惨篱。這類指針在 C 或者 C++中被叫做不透明指針(Opaque Pointer),它的實現(xiàn)和表一對使用者來說是不透明的围俘。
// 在 Swift 中這類指針的類型是 COpaguePointer,它用來表示那些在 Swift中無法進行類型描述的 C 指針// 那些能夠確定類型的指針所表示的是指向的內存是可以用某個 Swift 中的類型來描述的,因此都使用更加準確的 UnsafePoint來存儲琢融。而對于另外那些 Swift 無法描述的指針界牡,就統(tǒng)一寫成 COpaquePointer ,以作補充漾抬。隨著 Swift 的逐漸完善宿亡,這個類型的已經(jīng)越來越少了
// COpaquePointer 在 Swift 中扮演的是指針轉換的中間人的角色。不安全纳令,不建議使用】
// 另一種重要的指針形式是指向函數(shù)的指針挽荠,即一塊存儲了某個函數(shù)實際所在位置的內存空間。從Swift 2.0 開始平绩,這類指針可以轉化為閉包圈匆,不過與其他普通閉包不同,我們需要為它添加上 @convertion 標注 例如 C 中的一個函數(shù)
/*
int cFunction(int (callBack)(int x, int y)){
return callback(1, 2);
}
*/
// 在Swift 中調用
let callback :(Int32, Int32) -> Int32 = {
(x, y) -> Int32 in
return x + y
}
let result = cFounction(callback)
print(result)? //? 輸出3
// 在沒有歧義的情況捏雌, 甚至可以省掉這個標注跃赚, 值直接將它以一個 Swift 閉包的形式傳遞給C
let result1 = cFounction{
(x, y) -> Int32 in
return x + y
}