21

What's the quickest way to compare a NSUInteger with an int (e.g. 5) in objective-c?

Background - I'm noting that the following line of code gives an error:

STAssertEquals([nsMutableArrayInstance count], 5, @"xxxx");
// gives Type Mismatch

So what I'm asking effectively is how to correct this to fix the error...

Greg
  • 34,042
  • 79
  • 253
  • 454

3 Answers3

50

STAssertEquals requires that you compare like types to like types. So add "U" to the number to make it an unsigned literal:

STAssertEquals([nsMutableArrayInstance count], 5U, nil);

Alternatively, you could use OCHamcrest to say:

assertThat(nsMutableArrayInstance, hasCountOf(5));
Jon Reid
  • 20,545
  • 2
  • 64
  • 95
7
NSUInteger i = 42;
int j = 5;

if (i > j) {
  NSLog(@"the universe has not ended yet");
}

Instead of using STAssertEquals, you could use STAssertTrue:

STAssertTrue([nsMutableArrayInstance count] == 5, @"xxxx");
Dave DeLong
  • 242,470
  • 58
  • 448
  • 498
3

Use

STAssertEquals([nsMutableArrayInstance count], (NSUInteger)5, @"xxxx");

(NSUInteger)5 does not look as clean as 5U but it will also work correctly when compiling for 64-bit.

murat
  • 4,893
  • 4
  • 31
  • 29