我们有一个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创建的对象?
请注意,我能够检查快速代码中的值,而问题不在于桥接。另外,内存位置没有悬空。
答案 0 :(得分:0)
通过如下声明obj变量,一切正常
let obj:AVAssetWriter = Clazz.getObject() as AVAssetWriter