访问在目标C中创建的对象

时间:2018-07-28 07:18:11

标签: ios objective-c swift3 interop

我们有一个Objective C库,该库可以创建要在Swift代码中使用的对象。

该函数将对象作为ID返回。这是Objective C头文件(Clazz.h)中的声明。头文件已根据互操作性要求在桥接头中公开。

+ (id)getObject;

返回的指针是AVAssetWriter *的实例。要在Swift中访问此API,我按照以下文章中的步骤进行操作: Objective-C pointer and swift

这是Swift 3代码的使用者代码:

let obj = (Clazz.getObject() as! UnsafeMutableRawPointer).assumingMemoryBoundTo(to: AVAssetWriter.self).pointee

它还不错。但是,执行此代码后,该应用似乎崩溃了。

在Clazz.h中,我将该函数声明为:

+ (AVAssetWriter*)getObject();

并尝试在Swift中使用它,

let obj = Clazz.getObject() as AVAssetWriter

代码构建良好,但是在执行时失败。

我们如何在Swift中访问由Objective C创建的对象?

请注意,我能够检查快速代码中的值,而问题不在于桥接。另外,内存位置没有悬空。

1 个答案:

答案 0 :(得分:0)

通过如下声明obj变量,一切正常

let obj:AVAssetWriter = Clazz.getObject() as AVAssetWriter