Swift3:将原始指针转换为Int(指针本身就是int值,不会指向任何地方!)

Mec*_*cki 4 c pointers swift swift3

考虑一下C中的以下代码:

void someFunction ( int type, void * someData ) {
    unsigned value = (int)someData;
}
Run Code Online (Sandbox Code Playgroud)

我知道这段代码看起来有些奇怪,但是该函数是一个回调函数,并且该回调函数必须带有一个void *参数,因为someData实际上通常是指向某个内存结构的指针(type会告诉我哪种结构),但在这种情况下,它不是t。在那种情况下,它实际上只是一个无符号的int值;不是指向该值的指针,而是指向值本身。调用方实际上是这样调用此函数的:

unsigned value = ...;
callbackFunction(type, (void *)value);
Run Code Online (Sandbox Code Playgroud)

是的,这很愚蠢,但我尚未编写代码,也无法更改。我只需要实现回调。我真的很想在Swift(Swift 3)中这样做。但是在Swift中,回调必须看起来像这样:

func someFunction ( _ type: Int, _ someData: UnsafeMutableRawPointer? ) -> Void
Run Code Online (Sandbox Code Playgroud)

我的函数就很好了...但是我如何获取数字指针值,因为我需要无符号的int值并将其传递给另一个函数。

Mar*_*n R 5

您可以使用Int(bitPattern:)来获取指针值作为整数:

func someFunction ( _ type: Int, _ someData: UnsafeMutableRawPointer? ) -> Void {
    let value = Int(bitPattern: someData)
    print(value)
}
Run Code Online (Sandbox Code Playgroud)