Objective-C formatação string para booleano?

Respostas:

173

Uma maneira de fazer isso é converter para strings (já que existem apenas duas possibilidades, não é difícil):

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

Eu não acho que exista um especificador de formato para valores booleanos.

Michael Myers
fonte
2
As seqüências de saída não devem ser: "Sim" e "Não": P
Ben S
131
Ou "Bolo" e "Sem bolo". O que mais lhe convier.
Michael Myers
2
Eu amo bolo e sem bolo! Vou substituir todo o meu código x? @ "SIM": @ "NÃO" por x? @ "Bolo": @ "Bolo não" imediatamente: D - bem, pelo menos para as descrições dos meus objetos;)
Jason Coco
8
Ou TheCakeIsALie e TheCakeIsNotALie.
Warren P
3
% hhd é a maneira correta de exibir o valor booleano como sinalizador inteiro como 0 ou 1. 0 é falso 1 é verdadeiro.
Onder OZCAN
69

eu recomendaria

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

porque, hum, BOOLs são chamados YESou NOem Objective-C.

Yuji
fonte
2
Parece um ponto de utilidade óbvio para uma macro ou uma função (apenas para evitar a propagação de literais de strings por todo o aplicativo).
Warren P
Somente você realmente não precisa evitar a "propagação" de tais strings - como o ObjC calcula instâncias com o mesmo valor de strings imutáveis ​​(e outros objetos) - de modo que apenas uma cópia resida na memória. Macro está OK, função está OK e copiar e colar também estão OK.
Motti Shneor 03/04/19
52

Use o formatador inteiro %d, que imprimirá 0ou 1:

NSLog(@"%d", myBool);
Erin Geyer
fonte
23

No Objective-C, o BOOLtipo é apenas um caractere assinado. De <objc/objc.h>:

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

Assim, você pode imprimi-los usando o %dformatador Mas isso imprimirá apenas a 1ou a 0, não YESou NO.

Ou você pode simplesmente usar uma string, conforme sugerido em outras respostas.

mipadi
fonte
1
% C não tentará imprimir o caractere ASCII 0 ou 1, que são caracteres de controle?
precisa saber é o seguinte
21

Adicione esta função embutida ao seu .harquivo:

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

Agora você está pronto para ir...

NSLog(@"%@", NSStringFromBOOL(BOOL_VAL));
gigahari
fonte
1

Basta adicionar a função abaixo e passar o BOOLvalor e o método retornará o valorNSString

- (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
}
Bryan Norden
fonte
1

Acredito que a maneira mais fácil de fazer isso é:

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

@(expressão)

Avalia dinamicamente a expressão em caixa e retorna o literal do objeto apropriado com base em seu valor (por exemplo, NSString para const char *, NSNumber para int, etc.).

asamoylenko
fonte
0

Criei uma categoria de NSString com este

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

E use-o assim:

[NSString stringWithBool:boolValue];
xlsmearlx
fonte