如何在objective-c方法中设置和检索swift中的void *?

时间:2015-02-15 01:35:02

标签: objective-c swift

我一起使用swift和objective-c,但我无法弄清楚如何在swift中设置和检索Int到void *。 void *指针存储在c ++中。这是c ++库的Objective-c包装器。

Objective-C方法

-(void) setUserData:(void*) data{
    self.body->SetUserData(data);
}
-(void*) getUserData{
    return self.body->GetUserData();
} 

在swift中,我想将一个Int传递给setUserData,并从getUserData中将其作为Int检索。也可以是其他数据类型。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

让我们谈谈setUserData:。您需要创建一个指定所需类型的UnsafeMutablePointer,填充它并传递它。例如,理论上你可以说:

    let number = UnsafeMutablePointer<Int>.alloc(1)
    number.memory = 42
    thing.setUserData(number)

但我不确定你能真的这么说;这一切都取决于远端代码如何处理这个值。传递一个Swift结构(这是一个Int是什么)可能在这里没有任何意义。就个人而言,为了安全起见,我将它包装在NSNumber中。但是,也可能存在内存管理问题;你只是传递一个指针,所以将指针传递给一个本地(如上面的代码所示)可能是灾难性的。