Ale*_*zyb 5 enums objective-c ios swift
我有一个enum像这样定义的 Swift:
@objc enum SomeEnum: Int {
case one, two
}
Run Code Online (Sandbox Code Playgroud)
我可以SomeEnum正常在 Objetive-C 文件中使用,但是当我想在头文件中声明一个属性时,如下所示:
@property (nonatomic, assign) SomeEnum someEnum;
Run Code Online (Sandbox Code Playgroud)
编译器给出错误信息Unknown type name 'SomeEnum'。有趣的是我可以在类的私有接口中创建一个属性。我还尝试清理构建文件夹,但没有帮助。文件<module>-Swift.h已导入到.pch文件中。你知道问题的根源是什么吗?
您可以执行以下技巧:
对象类.h
#import <Foundation/Foundation.h>
@interface ObjcClass : NSObject
@property (nonatomic, assign) SomeEnum someEnum;
@end
Run Code Online (Sandbox Code Playgroud)
对象类.m
#import "<module>-Swift.h" // The order is important here
#import "ObjcClass.h"
@implementation ObjcClass
@end
Run Code Online (Sandbox Code Playgroud)
缺点:
您必须<module>-Swift.h在使用 Swift 枚举的类之前包含这些内容。
另一个问题是,如果您决定通过桥接标头将 Objective-C 类导出到 Swift,那么您将遇到解决该枚举的问题。
如果你能避免以这种方式混合 Swift 和 Objective-C,我建议你这样做。相反,您可以使用与 Objective-C 共享的 Swift 类,然后@class X在标头中使用前向声明(即 )。
另一种选择是将枚举移至 Objective-C 端,正如其他人在评论中建议的那样。
旁注:<module>-Swift.h最好包含在实现文件中,不要将其包含在标头中,以避免任何麻烦和循环导入。
| 归档时间: |
|
| 查看次数: |
3371 次 |
| 最近记录: |