1

C では、ポインターに割り当てられたメモリ位置を指すポインターを持つことは有効です。

static void * SomeContext = &SomeContext;

このポインターをcontextin observeValueForKeyPath:ofObject:change: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<()>')
4

1 に答える 1

3

Swift 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:

withUnsafePointer変数へのポインターを取得するために使用します。次に、それを自分自身に割り当てます。

var somePointer: UnsafeMutablePointer<Void> = nil
withUnsafePointer(&somePointer) { somePointer = UnsafeMutablePointer($0) }
于 2016-05-31T20:19:25.903 に答える