Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中使用Objective-C枚举_Objective C_Swift_Objc Bridging Header - Fatal编程技术网

在Swift中使用Objective-C枚举

在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 };

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

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
中?警卫