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


Ответы:


173

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

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

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


2
Разве выходные строки не должны быть: «Да» и «Нет»: P
Ben S

131
Или «Торт» и «Без торта». Все, что вам подходит.
Майкл Майерс

2
Я люблю торты, а не торты! Я собираюсь заменить весь свой код x? @ "YES": @ "NO" на x? @ "Cake": @ "No Cake" немедленно: D - ну, по крайней мере, для описания моих объектов;)
Джейсон Coco

8
Или TheCakeIsALie и TheCakeIsNotALie.
Уоррен П.

3
% hhd - это правильный способ отображения логического значения в виде целочисленного флага, равного 0 или 1. 0 - ложь, 1 - истина.
Ондер ОЗКАН

69

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

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

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


2
Это кажется очевидным полезным местом для макроса или функции (хотя бы для того, чтобы избежать распространения строковых литералов по всему приложению).
Уоррен П.

Только вам действительно не нужно избегать «распространения» таких строк - как ObjC объединяет однозначные экземпляры неизменяемых строк (и других объектов) - так что только одна копия находится в памяти. Макрос в порядке, функция в порядке, копирование и вставка тоже в порядке.
Мотти Шнеор

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.