Использование списка Objective-C в Swift

Я вызываю метод Objective C в моем быстром коде 2.3 в Xcode 8.2 (цель сборки 8.0). Он принимает 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'

Я понятия не имею, почему это происходит только тогда, когда я архивирую сборку или что нужно сделать, чтобы это исправить.


Изменить: Основываясь на ответах на аналогичные проблемы, которые я видел в другом месте, я изменил конфигурацию сборки архива с выпуска на отладку в моей схеме, и теперь он архивирует. Однако это не очень хорошая вещь. Будет ли архив содержать мои символы отладки при этом?

1 ответ

Оказывается, мне нужно было вызвать метод следующим образом:

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

Хотя я не уверен, почему добавление.init помогает.

Ключ найден здесь

Другие вопросы по тегам