Форматирование строки Objective C для логического? - PullRequest
113 голосов
/ 09 апреля 2010

Какой форматтер используется для логических значений?

РЕДАКТИРОВАТЬ:

Пример: NSLog(@" ??", BOOL_VAL);, что такое ???

Ответы [ 9 ]

166 голосов
/ 09 апреля 2010

Один из способов сделать это - преобразовать в строки (поскольку существует только две возможности, это не сложно):

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

Я не думаю, что есть спецификатор формата для логических значений.

67 голосов
/ 09 апреля 2010

Я бы порекомендовал

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

потому что, BOOL s называются YES или NO в Objective-C.

49 голосов
/ 26 октября 2012

Используйте целочисленный форматер %d, который напечатает либо 0, либо 1:

NSLog(@"%d", myBool);
23 голосов
/ 09 апреля 2010

В Objective-C тип BOOL - это просто символ со знаком. От <objc/objc.h>:

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

Таким образом, вы можете распечатать их, используя %d форматер, но это будет печатать только 1 или 0, а не YES или NO.

Или вы можете просто использовать строку, как предложено в других ответах.

19 голосов
/ 17 июня 2013

Добавьте эту встроенную функцию в ваш файл .h:

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

Теперь вы готовы к работе ...

NSLog(@"%@", NSStringFromBOOL(BOOL_VAL));
5 голосов
/ 09 апреля 2010

Строки формата для использования с NSLog и [NSString stringWithFormat] описаны здесь:

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

BOOL / bool / boolean даже не упоминаются ...

1 голос
/ 06 ноября 2018

Я считаю, что самый простой способ сделать это:

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

@ (выражение)

Динамически оценивает упакованное выражение и возвращает соответствующий литерал объекта на основе его значения (т. Е. NSString для const char *, NSNumber для int и т. Д.).

1 голос
/ 17 февраля 2016

Просто добавьте приведенную ниже функцию и передайте ей значение BOOL, и метод вернет обратно 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
}
0 голосов
/ 12 августа 2016

Я создал категорию NSString с этим

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

И используйте это так:

[NSString stringWithBool:boolValue];
...