Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How To Compare Integer to Objective-C enum

- (void)updateCheckBoxes {
    NSArray *availableFuncUnits = _scanner.availableFunctionalUnitTypes;
    for(int i = 0; i < [availableFuncUnits count]; i++) {

    }
}

If I put a breakpoint inside the for loop, the elements of the NSArray * 'availableFuncUnits' are (__NSCFNumber *)(int)0 and (__NSCFNumber *)(long)3.

The array is supposed to contain elements of the following :

enum
{
    ICScannerFunctionalUnitTypeFlatbed              = 0,
    ICScannerFunctionalUnitTypePositiveTransparency = 1,
    ICScannerFunctionalUnitTypeNegativeTransparency = 2,
    ICScannerFunctionalUnitTypeDocumentFeeder       = 3
};
typedef NSUInteger ICScannerFunctionalUnitType; 

Shouldn't I be able to do the following?

if([availableFuncUnits objectAtIndex:i] == ICScannerFunctionalUnitType.ICScannerFunctionalUnitTypeDocumentFeeder) {}

But it always gives me an error saying 'Expected identifier or '('.

How can I perform this comparison correctly? Thanks a lot for the help!

like image 932
AyushISM Avatar asked Apr 01 '26 00:04

AyushISM


1 Answers

There are two problems that I see:
1) The array availableFuncUnits contains NSNumber objects. You cant directly compare them with primitive types (NSUInteger).

So your if should be like this:

ICScannerFunctionalUnitType type = [availableFuncUnits[i] integerValue]
if(type == ICScannerFunctionalUnitTypeDocumentFeeder){}

In your snippet you were comparing the pointer, not the object.

2) The error you were seeing is because the proper way to use enums is:

i = ICScannerFunctionalUnitTypeDocumentFeeder
like image 54
Aris Avatar answered Apr 03 '26 13:04

Aris



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!