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

时间:2016-11-30 15:14:55

标签: c swift pointers swift3

请考虑C中的以下代码:

void someFunction ( int type, void * someData ) {
    unsigned value = (int)someData;
}

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

unsigned value = ...;
callbackFunction(type, (void *)value);

是的,这是愚蠢和丑陋但我没有编写代码,我也无法改变它。我只需要实现回调。我真的很想在Swift(Swift 3)中这样做。但在Swift中,回调必须如下所示:

func someFunction ( _ type: Int, _ someData: UnsafeMutableRawPointer? ) -> Void

我的函数调用得很好......但是如何获取数字指针值,因为我需要unsigned int值并将其传递给另一个函数。

1 个答案:

答案 0 :(得分:2)

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

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