progammingBeignner
progammingBeignner

Reputation: 936

Using NS_Option Enum declared in objective C in Swift Project

I have enum NS_OPTION declared in Objective C as such

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

however, when i try to use in Swift project by calling.

if rendererType == .PHRendererTypeSampleBuffer{

}

it fails to compile with error : Type of expression is ambiguous without more context.

I have also visited this topic Swift: Trouble Using Enums Declared in Objective-C, In Swift but it did not solve my problem

Thanks for any help.

Upvotes: 4

Views: 904

Answers (1)

Code Different
Code Different

Reputation: 93181

The question you linked to did provide a solution to your problem:

if rendererType == .SampleBuffer {

}

When you define your enum as NS_OPTIONS(type, EnumPrefix), remove the EnumPrefix from all references in Swift. However, be aware that this shortcut will not be valid the moment you break the naming convention in 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 { }

Upvotes: 1

Related Questions