请考虑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值并将其传递给另一个函数。
答案 0 :(得分:2)
您可以使用Int(bitPattern:)
将指针值作为
整数:
func someFunction ( _ type: Int, _ someData: UnsafeMutableRawPointer? ) -> Void {
let value = Int(bitPattern: someData)
print(value)
}