ios - 如何在 iOS 8 Swift 框架公共(public) API 中使用枚举

标签 ios swift enums

我正在尝试使用 Swift 或 Objective C 创建一个可供其他 iOS 8 应用程序使用的 Swift 框架。

在我的一些公共(public)函数中,我需要使用枚举。当然,Swift 有枚举,但这些与使用 Objective C 的客户端应用程序不兼容。所以我尝试使用以下形式的 Objective C 样式枚举:

typedef NS_ENUM(NSInteger, MyEnumType)
{
    MyEnumTypeGreen,
    MyEnumTypeBlue,
    MyEnumTypeYellow
};

为了公开此枚举类型,我将此声明放在 PublicEnums.h 中。要从我的 Swift 代码访问,我需要在我的框架项目的 Bridging-Header.h 中使用这一行:

#import "PublicEnums.h"

但是我得到了这个错误:

Include of non-modular header inside framework module 'MyFramework' which flags a line in the auto-generated MyFramework-Swift.h file:

#import "/Users/sourcepath.../ObjectiveC/MyFramework-Bridging-Header.h"

真的没有办法在 Swift 框架中使用可从 Objective C 应用程序使用的任何类型的枚举吗?

最佳答案

我刚刚在一个新项目中对此进行了测试,一切正常。我认为你的错误是由于没有正确使用桥接头。

我认为您不应该使用 import 语句导入桥接 header 。它应该自动添加到桥接 header 键下目标的build设置中:

Objective-C Bridging Header ------     projectName/projectName-Bridging-Header.h

此 key 的原始名称是 SWIFT_OBJC_BRIDGING_HEADER

测试:

    let x = MyEnumType.Blue
    println("\(x.toRaw())") // 1

请注意,在 Xcode 6.1 中,最后一行将使用 rawValue

关于ios - 如何在 iOS 8 Swift 框架公共(public) API 中使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26146908/

相关文章:

ios - 在 Swift 1.2 中编码和解码枚举

swift - NSView mouseDown 填充矩形

java - 如何访问 playframework 模板中的枚举字段

c# - 如何将自定义枚举描述绑定(bind)到 DataGrid

ios - xcassets 通用 x1、x2、x3 的像素大小是多少?

ios - AVPlayer 不从后端播放 URL

iOS - 以编程方式将 SegmentControl 替换为导航标题

iOS - 细胞图像模糊

ios - 以编程方式更改 View 高度会忽略约束

kotlin - Kotlin 中枚举类方法调用常量名的区别