NSLog'da Boole bayrağı nasıl yazdırılır?


Yanıtlar:


503

İşte nasıl yaparım:

BOOL flag = YES;
NSLog(flag ? @"Yes" : @"No");

?: formun üçlü koşullu işlecidir:

condition ? result_if_true : result_if_false

Gerçek günlük dizelerini uygun şekilde değiştirin.


55
Bunu da bir makro yapmak çok kolay:#define StringFromBOOL(b) ((b) ? @"YES" : @"NO")
jscs

3
Bunun nasıl çok oyu var? Bu bir boole değerinin nasıl kaydedileceği DEĞİLDİR, boolean değerine bağlı olarak farklı değerlerin nasıl kaydedileceği.
Acey

7
@Acey: Görünüşe göre, insanlar (orijinal asker dahil) ikincisiyle daha fazla ilgileniyorlardı. Bir tahminde bulunma tehlikesi olsaydım, bunun nedeni doğrudan değeri (0/1) yazdırmanın çok anlamlı olmamasıdır.
BoltClock

1
@BoltClock 0/1 günlük çıktısında anlamlı değil mi? Hepimizin burada programcı olduğumuzu sanıyordum lol
Cbas

298

%d, 0 YANLIŞ, 1 DOĞRU.

BOOL b; 
NSLog(@"Bool value: %d",b);

veya

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

Veri türü bazında %@aşağıdaki gibi değişir

For Strings you use %@
For int  you use %i
For float and double you use %f

16

Booleanlar sadece tamsayılardan başka bir şey değildir, sadece dökülen değerler gibidir ...

typedef signed char     BOOL; 

#define YES (BOOL)1
#define NO (BOOL)0

BOOL value = YES; 
NSLog(@"Bool value: %d",value);

Çıktı 1 ise, EVET aksi takdirde HAYIR


1
Hayır, bool signed char. 0 veya 1 dışında bir değer sağlanırsa, ifadeniz yanlış değerlendirilebilir.
CodaFi

Hayır, BOOL türü derleyicinize (32 vs 64 bit) bağlıdır ve genellikle bool ile aynı tür değildir. bool ise standart bir tip olan ve imzalı karakterle aynı olmayan bool'dur.
gnasher729

14

Swift'te şunları yapabileceğinizi unutmayın:

let testBool: Bool = true
NSLog("testBool = %@", testBool.description)

Bu günlüğe kaydedilecek testBool = true


Swift'te sadece kullanabilirsiniz print().
Dmitry

10

Bu, Devang'ın sorusuna doğrudan bir cevap olmasa da, aşağıdaki makronun BOOL'ları kaydetmek isteyen insanlar için çok yararlı olabileceğine inanıyorum. Bu, boolün değerini kaydeder ve değişkenin adıyla otomatik olarak etiketler.

#define LogBool(BOOLVARIABLE) NSLog(@"%s: %@",#BOOLVARIABLE, BOOLVARIABLE ? @"YES" : @"NO" )

BOOL success = NO;
LogBool(success); // Prints out 'success: NO' to the console

success = YES;
LogBool(success); // Prints out 'success: YES' to the console

Yararlı bir makro, özellikle değişken adını görüntüleme hilesi ile. Şahsen ben karışıklığı önlemek için BOOL parametre adı olarak kullanmaz.
jk7

8

Apple'ın FixIt özelliği, bana BOOL değerimi doğru bir şekilde veren% hhd verdi.


4

Dört yolla kontrol edebiliriz

İlk yol

BOOL flagWayOne = TRUE; 
NSLog(@"The flagWayOne result is - %@",flagWayOne ? @"TRUE":@"FALSE");

İkinci yol

BOOL flagWayTwo = YES; 
NSLog(@"The flagWayTwo result is - %@",flagWayTwo ? @"YES":@"NO");

Üçüncü yol

BOOL flagWayThree = 1;
NSLog(@"The flagWayThree result is - %d",flagWayThree ? 1:0);

Dördüncü yol

BOOL flagWayFour = FALSE; // You can set YES or NO here.Because TRUE = YES,FALSE = NO and also 1 is equal to YES,TRUE and 0 is equal to FALSE,NO whatever you want set here.
NSLog(@"The flagWayFour result is - %s",flagWayFour ? YES:NO);

2
NSArray *array1 = [NSArray arrayWithObjects:@"todd1", @"todd2", @"todd3", nil];
bool objectMembership = [array1 containsObject:@"todd1"];
NSLog(@"%d",objectMembership);  // prints 1 or 0

2

Swift'te, bir boolean değeri yazdırabilirsiniz; bu değer trueveya olarak görüntülenir false.

let flag = true
print(flag) //true

1

Bunu nasıl yapabileceğiniz aşağıda açıklanmıştır:

BOOL flag = NO;
NSLog(flag ? @"YES" : @"NO");

Bu temelde @BoltClock'un dört yıl önceki cevabının bir bölümü.
jk7

0
//assuming b is BOOL. ternary operator helps us in any language.
NSLog(@"result is :%@",((b==YES)?@"YES":@"NO"));

(b == EVET) sadece b ile aynıdır. listelendiği gibi, derleyicinin optimize edicisine güvenerek geri (b? @ "EVET": @ "HAYIR")
Armand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.