2011-07-19 12 views
15

chcę zrobić coś takiego:Czy istnieje specyfikator formatu, który działa z wartościami typu Boolean?

NSLog(@"You got: %x", booleanValue); 

gdzie x jest specifier. Ale nie mogę go znaleźć! Chcę uniknąć:

if (booleanValue) { 
    NSLog(@"You got: YES"); 
} 
else { 
    NSLog(@"You got: NO"); 
} 

Jakieś pomysły? Dokumenty nie mają specyfikatora typu Boolean. %@ też nie działa.

+1

Co śmieszne jest% x będzie działać. (małe litery w systemie szesnastkowym) – Joe

+0

'% @' jest specyfikatorem formatu dla wskaźnika obiektu Object-C. BOOL, Boolean, bool itp. Nie są typami obiektów. – Caleb

Odpowiedz

31

Oto dwie rzeczy, które działa:

NSLog(@"You got: %@",booleanValue ? @"YES" : @"NO"); 

lub można Obsada:

NSLog(@"You got: %d", (int)booleanValue); 

który będzie wyjście 0 lub 1

+0

Dzięki, zapomniałem o? : przełącz się! –

+2

Nie potrzebujesz obsady. 'NSLog()' jest variadic, 'signed char' (którego' BOOL' jest) będzie niejawnie promowane do 'int'. –

7

Można oddanych do int i użyć %d:

NSLog(@"You got: %d", (int)booleanValue); 

Albo użyć czegoś takiego:

NSLog(@"You got: %@", booleanValue ? @"YES" : @"NO"); 
+0

Obsada nie jest konieczna, zobacz mój komentarz dotyczący odpowiedzi PengOne. –

3

nie ma formatu specifier że wiem. Można to zrobić:

NSLog(@"You got: %@", (booleanValue ? @"YES" : @"NO")); 

Alternatywnie, można napisać niewiele funkcji lub makro używając logiki powyżej, które zajmuje BOOL i zwraca odpowiedni ciąg. Następnie możesz użyć tej funkcji w swoich logach.

0

Tak

Oto kod:

NSLog(@"%hhd",BOOLvariable); 

Drukuje 1 dla Tak i 0 dla Nie. Pracował dla mnie.

+0

Zgłasza ostrzeżenie od iOS10 (prawdopodobnie wcześniej) '% i', jednak nie generuje już ostrzeżenia nawet bez rzutowania jawnego (int). –

-1

Dla wartości BOOL można użyć specyfikatora formatu %hhd. Na przykład:

NSLog(@"You got: %hhd", booleanValue); 
+1

To jest to samo, co odpowiedź @ViruMax. – UditS

Powiązane problemy