ios - 在 Objective-C 中使用 Swift `enum` 作为属性类型

标签 ios objective-c swift enums

我有一个 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

缺点:

  1. 您必须包含 <module>-Swift.h在使用 Swift 枚举的类(class)之前。

  2. 另一个问题是,如果您决定通过桥接 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/

相关文章:

iPhone- 从我的应用程序 iOS 6 打开设置

ios - 检测两个节点上的屏幕位置

ios - 改变ios背景颜色

iOS 无法将 "Configure one of the app’ s 套接字用于 VoIP 使用“用于后台模式

ios - 以编程方式从 UIViewController 重定向到另一个 UIViewController

iphone - @synthesize window=_window 有什么作用?

Swift 2 + Parse 如何选择所有用户进入用户类

xcode - 使用 XCode 6/Swift 的 iOS 7.1 中不显示图像

ios - AWSS3TransferManagerErrorDomain 代码 = 5 "' 存储桶名称不能为空”在 swift 4

ios - 如何使用按钮根据页码播放不同的声音?