2016-05-31 32 views
1

在C中,它是有效的,以有一個指針指向分配給指針的內存位置:點的UnsafeMutablePointer <Void>到本身

static void * SomeContext = &SomeContext; 

我看這通過利用用於在目標C的代碼庫與KVO這個指針在observeValueForKeyPath:ofObject:change:context:中的context

是否可以指向Swift中爲該指針分配的內存空間的指針,或者爲指針手動分配內存?試圖將指針指向初始化過程中本身的內存值導致錯誤(如預期):

var somePointer: UnsafeMutablePointer<Void> = &somePointer // Error: Variable used within its own initial value 

CMutableVoidPointer不會在語言存在了,並且初始化指針(UnsafeMutablePointer<Void>())已被棄用,只是套指向nil

也許是這樣的:

var ptr = malloc(sizeof(UnsafeMutablePointer<Void>)) 
ptr = &ptr // Error: error: cannot assign value of type 'inout UnsafeMutablePointer<Void>' (aka 'inout UnsafeMutablePointer<()>') to type 'UnsafeMutablePointer<Void>' (aka 'UnsafeMutablePointer<()>') 
+0

你想要達到什麼目的? – Alexander

+0

@AMomchilov你會如何在Swift中編寫'static void * SomeContext =&SomeContext;'。這不是更大的問題的一部分,我只是想了解C指針如何橋接Swift工作。 – JAL

+1

我應該知道你回答了這樣的問題,謝謝@MartinR。 – JAL

回答

3

夫特3:

var somePointer = UnsafeMutableRawPointer(bitPattern: 1)! 
somePointer = UnsafeMutableRawPointer(mutating: &somePointer) 

print(somePointer) 
print(somePointer.load(as: UnsafeMutableRawPointer.self)) 
// Output of both should be the same. 

夫特2:

Use withUnsafePointer獲取指針的變量。然後將其分配給自己。

var somePointer: UnsafeMutablePointer<Void> = nil 
withUnsafePointer(&somePointer) { somePointer = UnsafeMutablePointer($0) } 
相關問題