快速铸造非女性指针<;MyStruct>;在swift中使用C void返回指针

快速铸造非女性指针<;MyStruct>;在swift中使用C void返回指针,swift,swift2,Swift,Swift2,我在C中有一个结构类型,swift根据C定义创建了一个结构指针变量——这部分工作正常 我有一个C函数,它返回一个指向同一类型C结构的void指针 问题是返回的C void指针没有转换到接收的swift结构指针。我想不出如何铸造或转换它。我错过了什么 C标题 void* MyCFunc(int input); struct MyStruct { int ID; int thisOne; float thatOne; } MyStruct; 快速呼叫代码 var ptr:Unsa

我在C中有一个结构类型,swift根据C定义创建了一个结构指针变量——这部分工作正常

我有一个C函数,它返回一个指向同一类型C结构的void指针

问题是返回的C void指针没有转换到接收的swift结构指针。我想不出如何铸造或转换它。我错过了什么

C标题

void* MyCFunc(int input);
struct MyStruct
{
   int ID;
   int thisOne;
   float thatOne;
} MyStruct;
快速呼叫代码

var ptr:UnsafePointer<MyStruct>
ptr = MyCFunc(5)                   //Error Here
var ptr:UnsafePointer
ptr=MyCFunc(5)//此处出错

看看这个“不言自明”的例子

struct MyStruct {
    var myId: Int
    var myDouble: Double
}

var myStruct = MyStruct(myId: 1, myDouble: 1.0)

// this mimics the funcion which returns Void *myStruct
var vptr = withUnsafeMutablePointer(&myStruct) { (pStruct) -> UnsafeMutablePointer<Void> in
    return UnsafeMutablePointer<Void>(pStruct)
}
print(vptr) // 0x00000001079c7828
// mimics mPtr =  (MyStruct *) vptr
let mPtr = UnsafeMutablePointer<MyStruct>(vptr) // UnsafeMutablePointer(0x10EE37838)

mPtr.memory.myId = 10
mPtr.memory.myDouble = 10.0

print(myStruct) // MyStruct(myId: 10, myDouble: 10.0)
struct MyStruct{
var myId:Int
var myDouble:Double
}
var myStruct=myStruct(myId:1,myDouble:1.0)
//这模仿了返回Void*myStruct的函数
var vptr=withUnsafeMutablePointer(&myStruct){(pStruct)->中的UnsafeMutablePointer
返回不可femeutablepointer(pStruct)
}
打印(vptr)//0x00000001079c7828
//模仿mPtr=(MyStruct*)vptr
设mPtr=UnsafeMutablePointer(vptr)//UnsafeMutablePointer(0x10EE37838)
mPtr.memory.myId=10
mPtr.memory.myDouble=10.0
print(myStruct)//myStruct(myId:10,myDouble:10.0)