Objective-C-Formatierungszeichenfolge für Boolesche Werte?

Antworten:

173

Eine Möglichkeit besteht darin, in Zeichenfolgen zu konvertieren (da es nur zwei Möglichkeiten gibt, ist dies nicht schwierig):

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

Ich glaube nicht, dass es einen Formatbezeichner für boolesche Werte gibt.

Michael Myers
quelle
2
Sollten die Ausgabezeichenfolgen nicht lauten: "Ja" und "Nein": P
Ben S
131
Oder "Kuchen" und "Kein Kuchen". Was immer dir passt.
Michael Myers
2
Ich liebe Kuchen und keinen Kuchen! Ich werde meinen gesamten x? @ "YES": @ "NO" -Code sofort durch x? @ "Cake": @ "No Cake" ersetzen: D - zumindest für meine Objektbeschreibungen;)
Jason Coco
8
Oder TheCakeIsALie und TheCakeIsNotALie.
Warren P
3
% hhd ist der richtige Weg, um den Booleschen Wert als ganzzahliges Flag als 0 oder 1 anzuzeigen. 0 ist falsch 1 ist für wahr.
Onder OZCAN
69

ich würde empfehlen

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

weil, ähm, BOOLs aufgerufen werden YESoder NOin Objective-C.

Yuji
quelle
2
Es scheint ein offensichtlicher nützlicher Punkt für ein Makro oder eine Funktion zu sein (schon allein, um die Verbreitung von String-Literalen in der App zu vermeiden).
Warren P
Nur müssen Sie die "Weitergabe" solcher Zeichenfolgen nicht wirklich vermeiden - da ObjC gleichwertige Instanzen unveränderlicher Zeichenfolgen (und anderer Objekte) zusammenfasst -, sodass sich nur eine Kopie im Speicher befindet. Das Makro ist in Ordnung, die Funktion ist in Ordnung und das Kopieren und Einfügen ist ebenfalls in Ordnung.
Motti Shneor
52

Verwenden Sie den Ganzzahlformatierer %d, der entweder 0oder Folgendes druckt 1:

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

In Objective-C ist der BOOLTyp nur ein vorzeichenbehaftetes Zeichen. Von <objc/objc.h>:

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

Sie können sie also mit dem %dFormatierer drucken. Dabei wird jedoch nur a 1oder a gedruckt 0, nicht YESoder NO.

Oder Sie können einfach eine Zeichenfolge verwenden, wie in anderen Antworten vorgeschlagen.

Mipadi
quelle
1
Wird% c nicht versuchen, das ASCII-Zeichen 0 oder 1 zu drucken, die beide Steuerzeichen sind?
JeremyP
21

Fügen Sie diese Inline-Funktion zu Ihrer .hDatei hinzu:

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

Jetzt können Sie loslegen ...

NSLog(@"%@", NSStringFromBOOL(BOOL_VAL));
Gigahari
quelle
1

Fügen Sie einfach die folgende Funktion hinzu und übergeben Sie sie. Der BOOLWert und die Methode geben die zurückNSString

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

Ich glaube, der einfachste Weg, dies zu tun, ist:

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

@(Ausdruck)

Wertet den Boxed-Ausdruck dynamisch aus und gibt das entsprechende Objektliteral basierend auf seinem Wert zurück (z. B. NSString für const char *, NSNumber für int usw.).

asamoylenko
quelle
0

Ich habe damit eine Kategorie von NSString erstellt

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

Und benutze es so:

[NSString stringWithBool:boolValue];
xlsmearlx
quelle