2017-03-31 64 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文件。這是objc方法的簽名:

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

當我編譯它用於調試和運行它也能正常工作。然而,當我嘗試歸檔並編譯版本,我得到這個消息:

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

我不知道爲什麼,當我歸檔生成或做什麼來解決它這只是發生。


編輯:根據答案,我看到其他地方類似的問題,我改變了檔案生成配置,從發佈在我的計劃進行調試,而現在它的檔案。然而,這似乎不是一件好事。通過這樣做,歸檔文件是否包含我的調試符號?

+0

這聽起來象是你的系統中存在,但沒有正確編譯源代碼。儘管如此,我並不是這方面的專家。 – Sethmr

+0

如果沒有看到整個項目,這很難回答。尋找「調試」和「發佈」配置之間的差異。也許有些東西需要封裝在'#ifdef DEBUG'中?守衛? – Sulthan

回答

0

事實證明,我需要調用的方法是這樣的:

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

雖然我不知道爲什麼增加的.init幫助。

Clue found here