我有一个像这样定义的Swift enum
:
@objc enum SomeEnum: Int {
case one, two
}
我通常可以在Objetive-C文件中使用SomeEnum
,但是当我想在头文件中声明一个属性时:
@property (nonatomic, assign) SomeEnum someEnum;
编译器提供错误消息Unknown type name 'SomeEnum'
。有趣的是我可以在类的私有接口中创建属性。我也尝试清理build文件夹,没有帮助。文件<module>-Swift.h
已导入.pch
文件中。你知道问题的根源是什么吗?
答案 0 :(得分:4)
您可以执行以下操作:
ObjcClass.h
#import <Foundation/Foundation.h>
@interface ObjcClass : NSObject
@property (nonatomic, assign) SomeEnum someEnum;
@end
ObjcClass.m
#import "<module>-Swift.h" // The order is important here
#import "ObjcClass.h"
@implementation ObjcClass
@end
缺点:
您必须在使用Swift枚举的类之前包含<module>-Swift.h
。
另一个问题是,如果您决定通过Bridging标头将Objective-C类导出到Swift,那么您将无法解决该枚举。
如果你能避免以这种方式混合使用Swift和Objective-C,我建议你这样做。相反,您可以使用与Objective-C共享的Swift类,然后在标题中使用前向声明(即@class X
)。
另一个选择是将枚举移至Objective-C方面,正如其他人在评论中所建议的那样。
附注:<module>-Swift.h
最好包含在实施文件中,不要将其包含在标题中以避免任何麻烦和循环导入。