Использование списка 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 помогает.