Moshe
Moshe

Reputation: 58067

Objective-C formatting string for boolean?

What formatter is used for boolean values?

EDIT:

Example: NSLog(@" ??", BOOL_VAL);, what is ?? ?

Upvotes: 126

Views: 103661

Answers (9)

asamoylenko
asamoylenko

Reputation: 2455

I believe the easiest way to do this is:

NSLog(@" %@", @(BOOL_VAL));

@(expression)

Dynamically evaluates the boxed expression and returns the appropriate object literal based on its value (i.e. NSString for const char*, NSNumber for int, etc.).

Upvotes: 4

gigahari
gigahari

Reputation: 681

Add this inline function to your .h file:

static inline NSString* NSStringFromBOOL(BOOL aBool) {
    return aBool? @"YES" : @"NO";
}

Now you are ready to go...

NSLog(@"%@", NSStringFromBOOL(BOOL_VAL));

Upvotes: 23

Bryan Norden
Bryan Norden

Reputation: 2537

Just add the below function and pass it the BOOL value and method will return back the NSString

- (NSString *)boolValueToString:(BOOL)theBool {
    if (theBool == 0)
        return @"NO"; // can change to No, NOOOOO, etc
    else
        return @"YES"; // can change to YEAH, Yes, YESSSSS etc
}

Upvotes: 1

xlsmearlx
xlsmearlx

Reputation: 638

I created a category of NSString with this

+ (instancetype)stringWithBool:(BOOL)boolValue {
return boolValue ? @"YES" : @"NO";
}

And use it like this:

[NSString stringWithBool:boolValue];

Upvotes: 0

Erin Geyer
Erin Geyer

Reputation: 12063

Use the integer formatter %d, which will print either 0 or 1:

NSLog(@"%d", myBool);

Upvotes: 59

mipadi
mipadi

Reputation: 410592

In Objective-C, the BOOL type is just a signed char. From <objc/objc.h>:

typedef signed char BOOL;
#define YES         (BOOL)1
#define NO          (BOOL)0

So you can print them using the %d formatter But that will only print a 1 or a 0, not YES or NO.

Or you can just use a string, as suggested in other answers.

Upvotes: 24

DLRdave
DLRdave

Reputation: 14250

Format strings for use with NSLog and [NSString stringWithFormat] are documented here:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

BOOL/bool/boolean are not even mentioned...

Upvotes: 5

Yuji
Yuji

Reputation: 34185

I would recommend

NSLog(@"%@", boolValue ? @"YES" : @"NO");

because, um, BOOLs are called YES or NO in Objective-C.

Upvotes: 72

Michael Myers
Michael Myers

Reputation: 191875

One way to do it is to convert to strings (since there are only two possibilities, it isn't hard):

NSLog(@" %s", BOOL_VAL ? "true" : "false");

I don't think there is a format specifier for boolean values.

Upvotes: 181

Related Questions