2016-05-31 7 views
1

는, 상기 포인터에 할당 된 메모리 위치에 대한 포인터 위치를 갖는 유효 이 포인터는 context이고 observeValueForKeyPath:ofObject:change:context:입니다.포인트 UnsafeMutablePointer <Void> 자체

Swift에서 해당 포인터에 할당 된 메모리 공간을 가리 키거나 포인터를 수동으로 할당 할 수 있습니까? 초기화 중 자체의 메모리 값에 포인터를 가리 키도록 노력하는 것은 (예상대로) 오류가 발생합니다

CMutableVoidPointer

var somePointer: UnsafeMutablePointer<Void> = &somePointer // Error: Variable used within its own initial value 
더 이상 언어에 존재하지 않는, 그리고 포인터 ( UnsafeMutablePointer<Void>()를) 초기화는 사용되지 않으며 단지 세트입니다 포인터는 nil입니다.

아마 같은 : 스위프트 3에

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 포인터가 신속한 작업에 어떻게 연결되는지 이해하려고 노력하고 있습니다. – JAL

+1

감사합니다. @MartinR과 같은 질문에 답해야한다는 것을 알고 있었음에 틀림 없습니다. – JAL

답변

3

: 2

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

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

스위프트 :

Use withUnsafePointer 변수에 대한 포인터를 얻는다. 그런 다음 자신에게 할당하십시오.

var somePointer: UnsafeMutablePointer<Void> = nil 
withUnsafePointer(&somePointer) { somePointer = UnsafeMutablePointer($0) } 
관련 문제