【问题标题】:Using NS_Option Enum declared in objective C in Swift Project在 Swift 项目中使用目标 C 中声明的 NS_Option 枚举
【发布时间】:2015-10-05 04:34:12
【问题描述】:

我已经在 Objective C 中声明了枚举 NS_OPTION

    typedef NS_OPTIONS(NSUInteger, PHRendererType)
{
    PHRendererTypeSampleBuffer,
    PHRendererTypeOpenGLES,
    PHRendererTypeQuartz
};

但是,当我尝试通过调用在 Swift 项目中使用时。

if rendererType == .PHRendererTypeSampleBuffer{

}

编译失败并出现错误:表达式类型不明确,没有更多上下文。

我也访问过这个话题Swift: Trouble Using Enums Declared in Objective-C, In Swift,但它并没有解决我的问题

感谢您的帮助。

【问题讨论】:

标签: objective-c swift enums


【解决方案1】:

您链接到的问题确实为您的问题提供了解决方案:

if rendererType == .SampleBuffer {

}

当您将枚举定义为 NS_OPTIONS(type, EnumPrefix) 时,请从 Swift 中的所有引用中删除 EnumPrefix。但是,请注意,一旦您违反了 Objective-C 中的命名约定,此快捷方式将无效:

// 1.
typedef NS_OPTIONS(NSUInteger, PHRendererType)
{
    PHRendererTypeSampleBuffer,
    PHRendererTypeOpenGLES,
    PHRendererTypeQuartz,
    SomethingElse
};

// Now you have to use the full enum name:
if renderedType == .PHRendererTypeSampleBuffer { }


// 2. Follow the naming convention and you can use the shortcut again:
typedef NS_OPTIONS(NSUInteger, PHRendererType)
{
    PHRendererTypeSampleBuffer,
    PHRendererTypeOpenGLES,
    PHRendererTypeQuartz,
    PHRendererTypeSomethingElse
};

if renderedType == .SomethingElse { }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多