Chaîne de formatage Objective-C pour booléen?


Réponses:


173

Une façon de le faire est de convertir en chaînes (puisqu'il n'y a que deux possibilités, ce n'est pas difficile):

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

Je ne pense pas qu'il existe un spécificateur de format pour les valeurs booléennes.


2
Les chaînes de sortie ne devraient-elles pas être: "Oui" et "Non": P
Ben S

131
Ou "Cake" et "No cake". Tout ce qui vous convient.
Michael Myers

2
J'adore le gâteau et pas le gâteau! Je vais remplacer tout mon code x? @ "OUI": @ "NON" par x? @ "Cake": @ "No Cake" immédiatement: D - enfin, au moins pour mes descriptions d'objets de toute façon;)
Jason Coco

8
Ou TheCakeIsALie et TheCakeIsNotALie.
Warren P

3
% hhd est la bonne façon d'afficher une valeur booléenne sous forme d'indicateur entier comme 0 ou 1. 0 est faux 1 est vrai.
Onder OZCAN

69

je recommanderais

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

parce que, um, BOOLs sont appelés YESou NOen Objective-C.


2
Cela semble être une tâche utilitaire évidente pour une macro ou une fonction (ne serait-ce que pour éviter la propagation de chaînes littérales dans toute l'application).
Warren P

Seulement, vous n'avez pas vraiment besoin d'éviter la "propagation" de telles chaînes - car ObjC coallescs des instances de même valeur de chaînes immuables (et d'autres objets) - de sorte qu'une seule copie réside en mémoire. La macro est OK, la fonction est OK et le copier-coller est également OK.
Motti Shneor

52

Utilisez le formateur d'entiers %d, qui imprimera soit 0soit 1:

NSLog(@"%d", myBool);

23

En Objective-C, le BOOLtype est juste un caractère signé. De <objc/objc.h>:

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

Vous pouvez donc les imprimer à l'aide du %dformateur. Mais cela n'imprimera qu'un 1ou un 0, pas YESou NO.

Ou vous pouvez simplement utiliser une chaîne, comme suggéré dans d'autres réponses.


1
% C n'essaiera-t-il pas d'imprimer le caractère ASCII 0 ou 1 qui sont tous deux des caractères de contrôle?
JeremyP

21

Ajoutez cette fonction en ligne à votre .hfichier:

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

Maintenant, vous êtes prêt à partir...

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


1

Ajoutez simplement la fonction ci-dessous et transmettez-lui la BOOLvaleur et la méthode renverra leNSString

- (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

Je pense que le moyen le plus simple de le faire est:

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

@(expression)

Évalue dynamiquement l'expression encadrée et renvoie le littéral d'objet approprié en fonction de sa valeur (c'est-à-dire NSString pour const char *, NSNumber pour int, etc.).


0

J'ai créé une catégorie de NSString avec ceci

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

Et utilisez-le comme ceci:

[NSString stringWithBool:boolValue];
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.