You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:49:57