Swift中使用Objective-C结构体报错:Cannot find type 'XXX' in scope
解决Swift中无法识别含Objective-C对象的结构体问题
问题核心:Objective-C中包含Objective-C对象指针(比如NSMenu*)的结构体,默认不会被Swift自动桥接,只有纯C类型的结构体才能直接被Swift识别。你的ObjCStruct因为包含NSMenu*成员,所以Swift报“Cannot find type 'XXX' in scope”错误。
解决方案:标记结构体为可桥接并修正内存修饰符
修改你的Objective-C头文件代码,给结构体加上NS_SWIFT_BRIDGED_TYPEDEF宏,同时给结构体里的Objective-C对象指针加上__strong修饰符:
#import <Cocoa/Cocoa.h> // 用typedef包裹并添加桥接标记,同时给NSMenu*加__strong typedef struct NS_SWIFT_BRIDGED_TYPEDEF ObjCStruct { __strong NSMenu* sMenu; int8_t menuID; } ObjCStruct; @interface ObjCClass : NSObject { NSMenu* cMenu; } @end
说明
NS_SWIFT_BRIDGED_TYPEDEF:告诉Swift编译器这个结构体需要被桥接,生成对应的Swift类型。__strong:结构体里的Objective-C对象指针默认是__unsafe_unretained,Swift无法正确管理这类指针的内存,加上__strong后,Swift会将其处理为强引用,确保对象生命周期正常。
修改后重新编译,Swift就能正常识别ObjCStruct类型并使用了。
内容的提问来源于stack exchange,提问作者Khushneet
相关产品推荐
相关产品推荐

