Об'єктивний рядок форматування для булевих?


Відповіді:


173

Один із способів зробити це - перетворити на рядки (оскільки є лише дві можливості, це не важко):

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

Я не думаю, що існує специфікатор формату для булевих значень.


2
Чи не повинні бути вихідними рядками: "Так" і "Ні": P
Ben S

131
Або "Торт" і "Без торта". Що б вам не підходило.
Майкл Майерс

2
Я люблю торт і жоден торт! Я збираюся замінити всі свої x? @ "ТАК": @ "НІ" код на x? @ "Торт": @ "Ні торта" негайно: D - ну, принаймні, для моїх описів об'єктів все одно;)
Джейсон Коко

8
Або TheCakeIsALie і TheCakeIsNotALie.
Warren P

3
% hhd - це правильний спосіб відображення булевого значення у вигляді цілого прапора як 0 або 1. 0 неправда 1 - це правда.
Onder OZCAN

69

Я б рекомендував

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

тому що, гм, BOOLs називаються YESабо NOв Objective-C.


2
Здається, очевидним місцем утиліти для макросу або функції (якщо тільки уникнути поширення рядкових літералів у всьому додатку).
Warren P

Тільки вам не потрібно уникати "розповсюдження" таких рядків - як ObjC, що має однозначні екземпляри незмінних рядків (та інших об'єктів) - таких, що лише одна копія залишається в пам'яті. Макрос гаразд, функція ОК, також копіювати та вставляти.
Motti Shneor

52

Використовуйте цілочисельний формат %d, який надрукує 0або 1:

NSLog(@"%d", myBool);

23

У Objective-C BOOLтип - це лише підписаний знак. Від <objc/objc.h>:

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

Таким чином, ви можете роздрукувати їх за допомогою %dформатера, але це буде друкувати лише a 1або a 0, не YESабо NO.

Або ви можете просто використовувати рядок, як пропонується в інших відповідях.


1
Не вдасться% c спробувати надрукувати символ ASCII 0 або 1, обидва з яких є контрольними символами?
JeremyP

21

Додайте цю функцію вбудованого .hфайлу у свій файл:

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

Тепер ви готові йти ...

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


1

Просто додайте нижченаведену функцію і передайте їй 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
}

1

Я вважаю, що найпростіший спосіб зробити це:

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

@ (вираз)

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


0

Я створив категорію NSString з цим

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

І використовуйте його так:

[NSString stringWithBool:boolValue];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.