在Swift中使用Objective-C枚举
我在Xcode 8.2(构建目标8.0)中的swift 2.3代码中调用Objective-C方法。它接受NS_枚举作为参数:在Swift中使用Objective-C枚举,objective-c,swift,objc-bridging-header,Objective C,Swift,Objc Bridging Header,我在Xcode 8.2(构建目标8.0)中的swift 2.3代码中调用Objective-C方法。它接受NS_枚举作为参数: typedef NS_ENUM(NSUInteger, MLCMultipleChoiceSlideSubtype) { MLCMultipleChoiceSlideSubtypeQA, MLCMultipleChoiceSlideSubtypeFillInTheBlank, MLCMultipleChoiceSlideSubtypeUnknown };
typedef NS_ENUM(NSUInteger, MLCMultipleChoiceSlideSubtype) {
MLCMultipleChoiceSlideSubtypeQA,
MLCMultipleChoiceSlideSubtypeFillInTheBlank,
MLCMultipleChoiceSlideSubtypeUnknown
};
包含此枚举和方法的.h文件位于我的桥接头.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
}
if let mcSlide = MultipleChoiceSlide.init(subtype: .QA, testSlide: slide, distractorFinder: distractorFinder) {
return mcSlide
}
当我编译它进行调试并运行它时,它工作得很好。但是,当我尝试将其归档并编译以供发布时,我收到以下消息:
... LessonConvertToMultipleChoiceOperation.swift:55:64: Static member 'QA' cannot be used on instance of type 'MLCMultipleChoiceSlideSubtype'
我不知道为什么只有在归档构建时才会发生这种情况,或者如何修复它
编辑:根据我在别处看到的类似问题的答案,我在方案中将归档构建配置从发行版更改为调试版,现在它归档了。然而,这似乎不是一件好事。这样做会使归档文件包含我的调试符号吗?结果表明,我需要像这样调用该方法:
if let mcSlide = MultipleChoiceSlide(subtype: .QA, testSlide: slide, distractorFinder: distractorFinder) {
return mcSlide
}
if let mcSlide = MultipleChoiceSlide.init(subtype: .QA, testSlide: slide, distractorFinder: distractorFinder) {
return mcSlide
}
虽然我不知道为什么添加.init会有帮助
结果是我需要像这样调用该方法:
if let mcSlide = MultipleChoiceSlide(subtype: .QA, testSlide: slide, distractorFinder: distractorFinder) {
return mcSlide
}
if let mcSlide = MultipleChoiceSlide.init(subtype: .QA, testSlide: slide, distractorFinder: distractorFinder) {
return mcSlide
}
虽然我不知道为什么添加.init会有帮助
这听起来像是系统中出现了一些东西,但在编译源代码中却不正确。虽然我不是这方面的专家,但如果不了解整个项目,就很难回答这个问题。查找“调试”和“发布”配置之间的差异。也许需要一些东西包装在
#ifdef DEBUG
中?guard?这听起来像是系统中存在的东西,但在编译源代码中却不正确。虽然我不是这方面的专家,但如果不了解整个项目,就很难回答这个问题。查找“调试”和“发布”配置之间的差异。也许需要一些东西包装在#ifdef DEBUG
中?警卫