Строка форматирования Objective-C для логического значения?

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

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

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


person Moshe    schedule 08.04.2010    source источник


Ответы (9)


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

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

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

person Michael Myers    schedule 08.04.2010
comment
Разве выходные строки не должны быть: Да и Нет: P - person Ben S; 09.04.2010
comment
Или торт и без торта. Все, что вам подходит. - person Michael Myers; 09.04.2010
comment
Я люблю торт и не торт! Я немедленно заменю весь свой код x?@YES:@NO на x?@Cake:@No Cake :D -- ну, во всяком случае, для описания моих объектов ;) - person Jason Coco; 09.04.2010
comment
Или TheCakeIsALie и TheCakeIsNotALie. - person Warren P; 09.04.2010
comment
Смотрите мой ответ, чтобы обернуть это в аккуратный макрос. - person gigahari; 18.06.2013
comment
%hhd - это правильный способ отображения логического значения в виде целочисленного флага как 0 или 1 . 0 — ложь, 1 — истина. - person Onder OZCAN; 04.05.2015
comment
@InnaKamoze спасибо! По какой-то причине я нахожу это решение гораздо более удовлетворительным. - person Miras Maratuly; 31.01.2018

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

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

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

person Yuji    schedule 08.04.2010
comment
Это кажется очевидным полезным местом для макроса или функции (хотя бы для того, чтобы избежать распространения строковых литералов по всему приложению). - person Warren P; 09.04.2010
comment
Только вам действительно не нужно избегать распространения таких строк - поскольку ObjC объединяет экземпляры неизменяемых строк (и других объектов) с одинаковым значением - так что в памяти находится только одна копия. Макрос в порядке, функция в порядке, копирование и вставка тоже в порядке. - person Motti Shneor; 03.04.2019

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

NSLog(@"%d", myBool);
person Erin Geyer    schedule 26.10.2012

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

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

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

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

person mipadi    schedule 08.04.2010
comment
Не попытается ли %c напечатать символ ASCII 0 или 1, оба из которых являются управляющими символами? - person JeremyP; 09.04.2010

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

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

Теперь вы готовы идти...

NSLog(@"%@", NSStringFromBOOL(BOOL_VAL));
person gigahari    schedule 17.06.2013

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

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

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

person DLRdave    schedule 08.04.2010
comment
Это очень хорошо скрыто на сайте разработчиков Apple. - person Echilon; 23.12.2011

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

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

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

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

person asamoylenko    schedule 06.11.2018

Просто добавьте приведенную ниже функцию и передайте ей значение 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
}
person Bryan Norden    schedule 17.02.2016

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

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

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

[NSString stringWithBool:boolValue];
person xlsmearlx    schedule 12.08.2016