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.