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?
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");
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");
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
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é!
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));
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");
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]]));