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.


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.


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);

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.


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));


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
}

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.).


0

Ich habe damit eine Kategorie von NSString erstellt

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

Und benutze es so:

[NSString stringWithBool:boolValue];
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.