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值并将其传递给另一个函数。
您可以使用Int(bitPattern:)来获取指针值作为整数:
func someFunction ( _ type: Int, _ someData: UnsafeMutableRawPointer? ) -> Void {
let value = Int(bitPattern: someData)
print(value)
}
Run Code Online (Sandbox Code Playgroud)