为啥 Objective-C 看不到特定的 Swift 类?
Posted
技术标签:
【中文标题】为啥 Objective-C 看不到特定的 Swift 类?【英文标题】:Why is a specific Swift class not visible to Objective-C?为什么 Objective-C 看不到特定的 Swift 类? 【发布时间】:2019-10-13 00:46:38 【问题描述】:全部
Xcode 10.3 和 Swift 5.0
我有一个包含 3 个目标(“名称”、“名称测试”和“本地名称”)的复杂项目
我已经设置了 Swift 和 Objective-C 之间的所有互操作性标头,包括 Name-Bridging-Header.h
、用于选择性导入 Name-Swift.h
、Name_Test-Swift.h
或 Name_Local-Swift.h
的 Objc 预处理器宏
#ifdef TEST
#import "Name_Test-Swift.h"
#elif LOCAL
#import "Name_Local-Swift.h"
#else
#import "Name-Swift.h"
#endif
我已经导入了几个我经常使用的 Swift 类,并且一切正常。
现在....
我添加了一个新的 Swift 类。这个新类是 NSObject 的子类
class NewClass: UIView
但是在Objective-C
类中使用新类,Xcode 找不到这个新类,出现以下错误:
# import "Name-Swift.h"
无法识别。
NewClass *item = [NewClass alloc];
- 未知类型名称'NewClass'
我检查了以下内容: - 新类被添加到所有目标中,并在 Build-Phases->Compile-Sources 部分进行验证
我的其他 Swift 类没有 public 或 @objc 标识符,一切正常......所以我仍然尝试在新类中使用它们(@objc 和类定义中的 public),没有成功在任何 Objective-C 类中只添加 NewClass *item = [NewClass alloc];
会使 Xcode 停止识别 "Name-Swift.h"
知道缺少什么吗?
【问题讨论】:
只是为了确保:您是否执行了 Product>Clean、删除派生数据和重新启动 Xcode 的常规仪式? 嗨@Yonat...我尝试了所有这些,还重新启动了我的Mac并重新启动了Xcode....我发现我无法在.h文件中声明一个Swift类实例我必须在 .m 【参考方案1】:经过一番测试,发现需要在我要声明对象的.h文件中导入Name-Swift.h
文件。
我的项目在Name-Prefix.pch
中定义了#import Name-Swift.h
#ifdef TEST
#import "Name_Test-Swift.h"
#elif LOCAL
#import "Name_Local-Swift.h"
#else
#import "Name-Swift.h"
#endif
.pch 文件中的#import 声明允许 Swift 类可以从我的 Objective-C 类的 .m 文件的任何位置访问,但不能从 .h 访问
我不确定这是否是预期的行为...我将深入研究文档。
【讨论】:
“我发现我无法在 .h 文件中声明 Swift 类实例”这意味着什么?您不应该在 .h 文件中声明任何 Swift 类,也不应该在其中导入生成的 Swift 标头。如果您需要在 .h 文件中提及 Swift 类,只需使用@class
转发声明名称即可。以上是关于为啥 Objective-C 看不到特定的 Swift 类?的主要内容,如果未能解决你的问题,请参考以下文章
01--Java语言概述与开发环境 最适合入门的Java教程
Cocoapod使用Mix和Match Swift和Objective-c代码