gpt4 book ai didi

objective-c - Swift 中的 NS_ENUM

转载 作者:行者123 更新时间:2023-11-30 10:05:52 26 4
gpt4 key购买 nike

注意:这不是this question的骗局。 .

我正在尝试使用名为 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 中的每个案例都是互斥的,因此它们不应该进行“或”运算。

但是,这会产生 Type 'UInt' has no member 'Required' 错误,这没有意义,因为枚举被定义为 NSUInteger< 类型 (应转换为 UInt)。我可以访问 GBValueFlags,但我无法看到 swift 将其翻译成的内容。奇怪的是,这有效:

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("verbose", shortcut: 118 /* Array("v".utf8)[0] */, requirement: GBValueFlags.Required.rawValue)

关于objective-c - Swift 中的 NS_ENUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36014617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com