String pemformatan Objective-C untuk boolean?

Jawaban:

173

Salah satu cara untuk melakukannya adalah dengan mengonversi ke string (karena hanya ada dua kemungkinan, tidak sulit):

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

Saya tidak berpikir ada penentu format untuk nilai boolean.

Michael Myers
sumber
2
Seharusnya output string: "Yes" dan "No": P
Ben S
131
Atau "Kue" dan "Tanpa kue". Apapun yang cocok untuk Anda.
Michael Myers
2
Saya suka kue dan tidak ada kue! Saya akan mengganti semua x saya? @ "YES": @ "NO" kode dengan x? @ "Cake": @ "No Cake" segera: D - yah, setidaknya untuk deskripsi objek saya;)
Jason Coco
8
Atau TheCakeIsALie dan TheCakeIsNotALie.
Warren P
3
% hhd adalah cara yang tepat untuk menampilkan nilai Boolean sebagai tanda integer sebagai 0 atau 1. 0 salah 1 untuk benar.
Onder OZCAN
69

saya ingin merekomendasikan

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

karena, um, BOOLs dipanggil YESatau NOdi Objective-C.

Yuji
sumber
2
Tampaknya tempat utilitas yang jelas untuk makro atau fungsi (jika hanya untuk menghindari penyebaran literal string di seluruh aplikasi).
Warren P
Hanya Anda yang tidak benar-benar perlu menghindari "penyebaran" string seperti itu - karena ObjC menggabungkan instance string yang tidak dapat diubah (dan objek lain) yang bernilai sama - sehingga hanya satu salinan yang berada di memori. Makro OK, fungsinya OK, dan copy-dan-paste juga OK.
Motti Shneor
52

Gunakan pemformat integer %d, yang akan mencetak salah satu 0atau 1:

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

Di Objective-C, BOOLjenisnya hanyalah karakter bertanda tangan. Dari <objc/objc.h>:

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

Jadi Anda bisa mencetaknya menggunakan %dformatter Tapi itu hanya akan mencetak a 1atau a 0, bukan YESatau NO.

Atau Anda bisa menggunakan string, seperti yang disarankan dalam jawaban lain.

mipadi
sumber
1
Tidak akan% c mencoba mencetak karakter ASCII 0 atau 1 yang keduanya merupakan karakter kontrol?
JeremyP
21

Tambahkan fungsi sebaris ini ke .hfile Anda :

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

Sekarang Anda siap untuk pergi ...

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

Cukup tambahkan fungsi di bawah ini dan berikan BOOLnilai dan metode akan mengembalikanNSString

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

Saya yakin cara termudah untuk melakukannya adalah:

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

@(ekspresi)

Secara dinamis mengevaluasi ekspresi kotak dan mengembalikan literal objek yang sesuai berdasarkan nilainya (yaitu NSString untuk const char *, NSNumber untuk int, dll.).

asamoylenko
sumber
0

Saya membuat kategori NSString dengan ini

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

Dan gunakan seperti ini:

[NSString stringWithBool:boolValue];
xlsmearlx.dll
sumber