2009-04-10 10 views
58

Se si dispone di un metodo che restituisce un BOOL, come si esegue il cast in un NSString in modo che possa stamparlo in console?BOOL to NSString

Per esempio, ho provato a fare questo, che non funziona:

NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 

Ma ho davvero voglia di trasformare in realtà il valore di ritorno in un NSString. So che è un tipo di dati primitivo, quindi non posso chiamare metodi su di esso. Devo creare una stringa separatamente e quindi usare il Bool come parametro in un metodo su NSString?

+2

Il problema con la tua affermazione è semplicemente che tu non ha incluso alcun identificatore di formato nel primo argomento di NSLog. Non ha niente a che fare con BOOL o no. –

risposta

63

Hai bisogno di un identificatore di formattazione nella stringa di formato:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 
3

NSLog utilizza un semplice in stile printf formato invocazione il suo testo, e il tuo esempio di codice manca la sequenza di caratteri necessari per incorporare un oggetto.

Questo dovrebbe funzionare:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 
64

Utilizzare un ternary operator:

BOOl isKind= [thing isKindOfClass:[NSString class]]; 

NSLog(@"Is Kind of NSString: %d", isKind); 
NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO"); 
+8

Manca "@" davanti a quelle stringhe. – willc2

+0

Grande trucco lì! –

32

Negli atti sfondo BOOL come un tipo int in modo da poter usare% i per verificare il valore di un tipo BOOL in NSLog :

BOOL a = YES; 
BOOL b = NO; 
NSLog(@"a is %i and b is %i", a, b); 

// Output: a is 1 and b is 0 
+0

Grazie, ha funzionato alla grande +1 –

22

Quindi, so che questo è davvero vecchio, ma ho pensato che potrei anche gettare la mia s oluzione sul ring. Faccio:

#define NSStringFromBOOL(aBOOL) ((aBOOL) ? @"YES" : @"NO") 
NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass: [NSString class]]); 

sento che questo è più in linea con alcuni dei to-stringa di macro di Apple (NSStringFromClass, NSStringFromRect, NSStringFromSelector, e così via), e in generale piuttosto semplice da utilizzare on-the-fly. Assicurati di mettere quella macro da qualche parte accessibile a livello globale o importata frequentemente!

+13

Non è una buona idea anteporre le cose a NS-. Questo è il prefisso di Apple. Porta a un bel po 'di frustrazione quando lo aggiungono più tardi e le tue definizioni iniziano in modo subdolo. – Chuck

+5

Ma cosa fai quando l'oggetto che stai controllando è * effettivamente chiamato * NSString? Chiamarlo diversamente non sarebbe rappresentativo di ciò che sta controllando. – chroipahtz

+2

Concordato con Chuck; la macro sarebbe meglio chiamata 'BOOLToNSString()'. @chroipahtz –

12

si stampa un BOOL come questo:

NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO"); 

Oppure, con il nuovo @ notazione, si potrebbe fare:

NSLog(@"The BOOL value is %@", @(theBoolValue)); 
+0

Questo dovrebbe essere abbastanza buono. – justinkoh

-1

Questo è un lavoro per me:

NSLog(@"The BOOL value is %@", theBoolValue ? "YES" : "NO"); 
+0

Questo non funzionerà poiché '" SÌ "' non risponderà a '% @'. – Droppy

0

Prima di tutto è necessario aggiungere uno specificatore di formattazione %@. Esso dovrebbe essere simile a questo:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 

Inoltre è possibile estrarre una conversione BOOL-NSString con la funzione extern come Apple ha fatto con NSStringFromCGRect, NSStringFromClass etc.

Creare utils file o aggiungere alla già esistente quelli intestazione il seguente codice:

//NSString+TypeConversion.h 

extern NSString *NSStringFromBOOL(BOOL aBool); 

e anche aggiungere il seguente codice in esecuzione:

//NSString+TypeConversion.m 

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

Così ora è possibile utilizzare questa funzione in altri luoghi e il tuo codice diventa più chiaro e riutilizzabile:

#import "NSString+TypesConversion.h" 

NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass:[NSString class]]));