2016-05-31 7 views
1

は、ポインタに割り当てられたメモリ位置へのポインタポイントを有することが有効ですこのポインタはcontextとしてobserveValueForKeyPath:ofObject:change:context:にあります。ポイントUnsafeMutablePointer <Void>自体へ

スウィフトでそのポインタに割り当てられたメモリ空間へのポインタを指すことは可能ですか、手動でポインタのメモリを割り当てますか?初期化中に自身のメモリの値へのポインタをポイントするように試みる(予想通り)エラーが発生:

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

CMutableVoidPointerはもはや言語には存在しない、およびポインタ(UnsafeMutablePointer<Void>())を初期化することは推奨されておらず、単にセットnilへのポインタ。たぶん

のようなもの:変数へのポインタを取得するために

Use withUnsafePointer

スウィフト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

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。次にそれをそれ自身に割り当てます。

var somePointer: UnsafeMutablePointer<Void> = nil 
withUnsafePointer(&somePointer) { somePointer = UnsafeMutablePointer($0) } 
関連する問題