2017-03-31 610 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가 파일에 있습니다.

+ (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 
} 

이 잘 작동이는 objc 방법의 서명입니다. 나는 그것을 보관 및 릴리스 컴파일 할 때, 나는이 메시지 : 내가 빌드 또는 무엇 그것을 해결하기 위해 할 수있는 보관할 때 만 발생하는 이유

... LessonConvertToMultipleChoiceOperation.swift:55:64: Static member 'QA' cannot be used on instance of type 'MLCMultipleChoiceSlideSubtype' 

나는 아무 생각이 없습니다.


편집 : 나는 다른 곳에서 보았던 유사한 문제에 대한 답변을 바탕으로, 나는 내 방식으로 디버깅 릴리스에서 아카이브 빌드 구성을 변경하고, 지금 아카이브. 이것은 그러나 좋은 일처럼 보이지 않습니다. 이렇게하면 아카이브에 디버그 기호가 포함됩니까?

+0

그것은하지만 제대로 컴파일 소스에서, 시스템에 존재하는 뭔가처럼 들린다. 나는이 문제에 대해 전혀 전문가가 아니다. – Sethmr

+0

전체 프로젝트를 보지 않으면 대답하기가 매우 어렵습니다. "Debug"와 "Release"구성의 차이점을 찾으십시오. 아마도 뭔가 필요한 것이'#ifdef DEBUG' 안에 싸여 있습니까? 가드? – Sulthan

답변

0

내가이 같은 방법을 호출 할 필요가 있다고 밝혀 :

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

.init을 추가하는 데 도움이 이유를 잘 모르겠습니다 만.

Clue found here