【问题标题】:Import Obj-C file which imports auto-generated Swift header导入自动生成的 Swift 标头的 Obj-C 文件
【发布时间】:2017-08-07 16:37:15
【问题描述】:

这是Import a file in bridging-header which imports Swift header 的部分副本,但我遇到了与Rich 相同的问题

但是在 Swift 中声明的枚举呢? :(

我正在将 Obj-C iPad 应用程序移植到 iPhone。但是我是一个 Swift 开发者,我真的不想重写现有的功能;替换 UI。

我为 iPhone 版本创建了一个新目标。在我的桥接头中,我导入了一个使用 #import "ProjectName-Swift.h" 的 obj-c 类。由于此文件是自动生成的,因此在我构建此新目标时它不存在。 linked 的答案是添加一个@class,但遗留代码使用了一个枚举,它现在给出错误“预期类型”。

// File that I am currently importing
-(void)setSmileyType:(SmileyFace)type andDelegate:(id<NumberRatingDelegate>)delegate;
// This line now throws an error "Expected a type"

//File that was previously auto imported
@objc public enum SmileyFace: Int {

【问题讨论】:

    标签: ios objective-c swift enums objective-c-swift-bridge


    【解决方案1】:
    Swift 中的

    @objc enum 在 ProjectName-Swift.h 中作为 C 枚举公开。 (使用宏SWIFT_ENUM。)

    您可以将这样的内容放入使用 Swift 枚举的 Objective-C 头文件中:

    typedef enum SmileyFace: NSInteger SmileyFace;
    

    (与生成代码的第一部分相同,带有宏SWIFT_ENUM。)

    【讨论】:

    • 谢谢。由于此更改,我的项目在运行时仍会崩溃,但我目前正在假设它不相关。如果我可以开始我的项目,或者如果我确定这个答案是完整的,我会接受。
    • 这对我有用,但为什么需要这样做?许多其他答案只是说@objc 对于Int Swift 枚举应该足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2017-01-13
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多