web-dev-qa-db-fra.com

BOOL à NSString

Si j’ai une méthode qui retourne une BOOL, comment puis-je la convertir en une NSString afin que je puisse l’imprimer dans la console? 

Par exemple, j'ai essayé de faire cela, ce qui ne fonctionne pas:

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

Mais je veux vraiment transformer la valeur de retour en NSString. Je sais que c'est un type de données primitif, je ne peux donc pas appeler de méthodes dessus. Dois-je créer une chaîne séparément puis utiliser le booléen comme paramètre dans une méthode sur NSString?

58
Craig

Vous avez besoin d'un spécificateur de formatage dans votre chaîne de format:

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

Utilisez un opérateur ternary :

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

NSLog(@"Is Kind of NSString: %d", isKind);
NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO");
65
Andrew Grant

En arrière-plan, BOOL agit comme un type int. Vous pouvez donc utiliser% i pour rechercher la valeur d’un type BOOL dans 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
33
bonus

Donc, je sais que c'est vraiment vieux, mais je pensais que je pourrais aussi bien jeter ma solution dans le ring. Je fais:

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

Je pense que cela correspond plus à certaines macros to-string d'Apple (NSStringFromClass, NSStringFromRect, NSStringFromSelector, etc.), et généralement assez simple d'utilisation à la volée. Veillez simplement à placer cette macro dans un endroit globalement accessible ou fréquemment importé!

22
Patrick Perini

Vous imprimez un BOOL comme ceci:

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

Ou, avec la nouvelle notation @, on pourrait faire:

NSLog(@"The BOOL value is %@", @(theBoolValue));
13
Hot Licks

NSLog utilise un simple format d'appel de style printf, son texte; votre exemple de code ne contient pas la séquence de caractères nécessaire pour incorporer un objet.

Cela devrait fonctionner:

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

Tout d’abord, vous devriez ajouter un spécificateur de formatage %@. Il devrait ressembler à ceci:

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

Vous pouvez également extraire une conversion de BOOL à NSString avec une fonction externe comme Apple l’a fait avec NSStringFromCGRect, NSStringFromClass etc.

Créez un fichier utils ou ajoutez à l'en-tête des existants le code suivant:

//NSString+TypeConversion.h

extern NSString *NSStringFromBOOL(BOOL aBool);

Et ajoutez également le code suivant dans l'implémentation:

//NSString+TypeConversion.m

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

Alors maintenant, vous pouvez utiliser cette fonction ailleurs et votre code devient plus clair et réutilisable:

#import "NSString+TypesConversion.h"

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