在Swift中使用Objective-C Enum

时间:2017-03-31 20:50:35

标签: objective-c swift objc-bridging-header

我在Xcode 8.2(构建目标8.0)中的swift 2.3代码中调用了Objective-C方法。它接受NS_ENUM作为参数:

typedef NS_ENUM(NSUInteger, MLCMultipleChoiceSlideSubtype) {
  MLCMultipleChoiceSlideSubtypeQA,
  MLCMultipleChoiceSlideSubtypeFillInTheBlank,
  MLCMultipleChoiceSlideSubtypeUnknown
};

包含此枚举和方法的.h文件位于我的bridging-header.h文件中。这是objc方法的签名:

+ (nullable instancetype)slideWithSubtype:(MLCMultipleChoiceSlideSubtype)subtype testSlide:(nonnull TestSlide *)slide distractorFinder:(nonnull MultipleChoiceDistractorFinder *)distractorFinder;

然后我就像这样从Swift 2.3中调用它:

if let mcSlide = MultipleChoiceSlide(subtype: .QA, testSlide: slide, distractorFinder: distractorFinder) {
    return mcSlide
}

当我编译它以进行调试并运行它时,这很好用。但是,当我尝试将其存档并编译以供发布时,我收到此消息:

  ... LessonConvertToMultipleChoiceOperation.swift:55:64: Static member 'QA' cannot be used on instance of type 'MLCMultipleChoiceSlideSubtype'

我不知道为什么只有在归档构建或修复它时该怎么做才会发生。

编辑:根据我在其他地方看到的类似问题的答案,我在我的方案中将存档构建配置从Release更改为Debug,现在归档。然而,这似乎不是一件好事。存档是否包含我的调试符号?

1 个答案:

答案 0 :(得分:0)

事实证明我需要调用这样的方法:

if let mcSlide = MultipleChoiceSlide.init(subtype: .QA, testSlide: slide, distractorFinder: distractorFinder) {
   return mcSlide
}

虽然我不确定为什么添加.init有帮助。

Clue found here