ПРИМЕЧАНИЕ: Это не обман this question.NS_ENUM in Swift
Я пытаюсь использовать библиотеку с именем GBCli в Swift. Это было написано в 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
является исключительным, поэтому они не предназначены для OR.
Тем не менее, это дает ошибку 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
?
Определение собственного enum не будет работать, потому что внутренний код GBCli проверяет аргумент против его собственного перечисления.
Как насчет 'parser.registerOption ("многословный", ярлык: 118/* Array ("v" .utf8) [0] * /, требование: GBValueFlags.Required.rawValue) '? –
@JonBrooks СПАСИБО !!! Опубликуйте как ответ, и я соглашусь. – Coder256