【问题标题】:NS_ENUM in SwiftSwift 中的 NS_ENUM
【发布时间】:2016-03-15 14:50:35
【问题描述】:

注意:这不是this question的欺骗。

我正在尝试在 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 中的每个案例都是互斥的,因此它们不应该被 OR'ed 在一起。

但是,这给出了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) 怎么样?
  • @JonBrooks 谢谢!!!发布为答案,我会接受。

标签: objective-c swift enums compiler-errors objective-c-swift-bridge


【解决方案1】:

你可以这样做(虽然不漂亮):

parser.registerOption("verbose", shortcut: 118 /* Array("v".utf8)[0] */, requirement: GBValueFlags.Required.rawValue)

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多