【问题标题】:How to use enum in iOS 8 Swift framework public API如何在 iOS 8 Swift 框架公共 API 中使用枚举
【发布时间】:2014-10-01 17:18:04
【问题描述】:

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

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

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

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

#import "PublicEnums.h"

然后我得到一个错误:

在框架模块“MyFramework”中包含非模块化标头,它在自动生成的 MyFramework-Swift.h 文件中标记一行:

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

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

【问题讨论】:

    标签: ios swift enums


    【解决方案1】:

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

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

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

    此密钥的原始名称是 SWIFT_OBJC_BRIDGING_HEADER

    测试:

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

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

    【讨论】:

    • 谢谢。但我不是#importing 桥接头;如您所述,它实际上是在项目级别设置的。发生错误是因为自动生成的 MyFramework-Swift.h 自动包含该 #import 语句。我认为要重现您需要一个包含 Swift 框架和引用该框架的示例应用程序的工作区。
    • 如果你有一个不兼容的框架,请维护者更新它。
    • 嗯,我猜你必须自己更新它,对吧?删除包含语句!
    • 就像我说的,MyFramework-Swift.h 文件是自动生成的。这发生在构建时的消费应用程序中。我无法删除该行。
    • 似乎将 Swift 导入到 Objective-C 或反之亦然之间是有区别的。在这种情况下,您想将 Objective-C 导入 Swift,上面描述了它是如何完成的。 “MyFramework-Swift.h”文件用于将 Swift 导入到 Objective-C。我认为可以很容易地避免同时混合两者。
    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 2010-12-04
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多