備註:這不是this question的騙局。NS_ENUM in Swift
我想在Swift中使用名爲GBCli的庫。它是用Objective-C編寫的。我有一個特定的枚舉麻煩:
/** Various command line argument value requirements. */
typedef NS_ENUM(NSUInteger, GBValueFlags) {
GBValueRequired, ///< Command line argument requires a value.
GBValueOptional, ///< Command line argument can optionally have a value, but is not required.
GBValueNone ///< Command line argument is on/off switch.
};
我試圖使用方法:
- (void)registerOption:(NSString *)longOption shortcut:(char)shortOption requirement:(GBValueRequirements)requirement;
在文檔中,建議使用方法是:
[parser registerOption:@"verbose" shortcut:'v' requirement:GBValueRequired];
我試着翻譯這作爲:
parser.registerOption("verbose", shortcut: 118 /* Array("v".utf8)[0] */, requirement: .Required);
注意:看起來GBValueRequirements
是庫使用的參數類型,但是GBValueFlag
是他們打算傳遞給所述方法的實際類型。證據:typedef NSUInteger GBValueRequirements;
,上面提到的枚舉,以及許多函數採用GBValueRequirements
的事實。還請注意,GBValueFlags
中的每個案例都是排他性的,因此它們並不意味着「或」在一起。
但是,這給出了一個錯誤Type 'UInt' has no member 'Required'
,這是沒有意義的看到該枚舉被定義爲類型NSUInteger
(它應該轉換爲UInt)。我能夠訪問GBValueFlags,但我無法看到任何迅速翻譯它。奇怪的是,這個工程:
let requiredTest : GBValueFlags = .Required;
但這並不:
parser.registerOption("verbose", shortcut: 118 /* Array("v".utf8)[0] */, requirement: requiredTest);
因爲它拋出:
Cannot convert value of type 'GBValueFlags' to expected argument type 'UInt'
在編譯時。我應該如何通過.Required
的等效方法?
定義我自己的枚舉不起作用,因爲GBCli的內部代碼根據自己的枚舉檢查參數。
怎麼樣'parser.registerOption( 「詳細」,便道:118/*陣列( 「V」 .utf8)[0] * /,要求:GBValueFlags.Required.rawValue)'? –
@JonBrooks謝謝!作爲回答發佈,我會接受。 – Coder256