我有一个 Swift enum
定义如下:
@objc enum SomeEnum: Int {
case one, two
}
我可以使用 SomeEnum
通常在 Objetive-C 文件中,但是当我想在头文件中声明一个属性时,如下所示:
@property (nonatomic, assign) SomeEnum someEnum;
编译器给出错误信息 Unknown type name 'SomeEnum'
.有趣的是,我可以在类的私有(private)接口(interface)中创建一个属性。我也尝试清理构建文件夹,但没有帮助。文件 <module>-Swift.h
已导入 .pch
文件。您知道问题的根源是什么吗?
最佳答案
您可以使用以下技巧:
对象类.h
#import <Foundation/Foundation.h>
@interface ObjcClass : NSObject
@property (nonatomic, assign) SomeEnum someEnum;
@end
对象类.m
#import "<module>-Swift.h" // The order is important here
#import "ObjcClass.h"
@implementation ObjcClass
@end
缺点:
您必须包含
<module>-Swift.h
在使用 Swift 枚举的类(class)之前。另一个问题是,如果您决定通过桥接 header 将 Objective-C 类导出到 Swift,那么您将无法解析该枚举。
如果您可以避免以这种方式混合使用 Swift 和 Objective-C,我建议您这样做。相反,您可以使用与 Objective-C 共享的 Swift 类,然后在 header 中使用前向声明(即 @class X
)。
另一种选择是将枚举移至 Objective-C 端,正如其他人在评论中所建议的那样。
旁注:<module>-Swift.h
最好包含在实现文件中,不要将它包含在 header 中以避免任何麻烦和循环导入。
关于ios - 在 Objective-C 中使用 Swift `enum` 作为属性类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42450043/