2017-03-31 67 views
1

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

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

包含该枚举和方法h文件是在我的桥接-header.h文件。这是objc方法的签名:

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

然后我把它从雨燕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' 

我不知道为什么,当我归档生成或做什么来解决它这只是发生。


编辑:根据答案,我看到其他地方类似的问题,我改变了档案生成配置,从发布在我的计划进行调试,而现在它的档案。然而,这似乎不是一件好事。通过这样做,归档文件是否包含我的调试符号?

+0

这听起来象是你的系统中存在,但没有正确编译源代码。尽管如此,我并不是这方面的专家。 – Sethmr

+0

如果没有看到整个项目,这很难回答。寻找“调试”和“发布”配置之间的差异。也许有些东西需要封装在'#ifdef DEBUG'中?守卫? – Sulthan

回答

0

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

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

虽然我不知道为什么增加的.init帮助。

Clue found here