BOOL для NSString - PullRequest
       20

BOOL для NSString

58 голосов
/ 10 апреля 2009

Если у меня есть метод, который возвращает BOOL, как мне привести его к NSString, чтобы я мог распечатать его в консоли?

Например, я попытался сделать это, но это не работает:

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

Но я действительно хочу превратить возвращаемое значение в строку NSString. Я знаю, что это примитивный тип данных, поэтому я не могу вызывать методы для него. Нужно ли создавать строку отдельно, а затем использовать Bool в качестве параметра в методе NSString?

Ответы [ 8 ]

65 голосов
/ 10 апреля 2009

Используйте троичный оператор :

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

NSLog(@"Is Kind of NSString: %d", isKind);
NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO");
63 голосов
/ 10 апреля 2009

Вам нужен спецификатор форматирования в строке формата:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
33 голосов
/ 23 февраля 2011

В фоновом режиме BOOL действует как тип int, поэтому вы можете использовать% i для проверки значения типа BOOL в 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
22 голосов
/ 14 декабря 2011

Итак, я знаю, что это действительно старо, но я подумал, что с тем же успехом могу выбросить свое решение на ринг. Я делаю:

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

Я чувствую, что это больше соответствует некоторым макросам Apple в строку (NSStringFromClass, NSStringFromRect, NSStringFromSelector и т. Д.), И, как правило, довольно прост в использовании на лету. Просто не забудьте поместить этот макрос в глобально доступный или часто импортируемый!

13 голосов
/ 11 сентября 2012

Вы печатаете BOOL так:

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

Или с новой нотацией @ можно сделать:

NSLog(@"The BOOL value is %@", @(theBoolValue));
3 голосов
/ 10 апреля 2009

NSLog использует простой формат вызова стиля printf в своем тексте, и в вашем примере кода отсутствует последовательность символов, необходимая для встраивания объекта.

Это должно работать:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
0 голосов
/ 16 июня 2016

Прежде всего вы должны добавить спецификатор форматирования %@. Это должно выглядеть так:

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

Также вы можете извлечь преобразование из BOOL в NSString с внешней функцией, как Apple сделала с NSStringFromCGRect, NSStringFromClass и т.д.

Создайте файл утилит или добавьте к существующим заголовкам следующий код:

//NSString+TypeConversion.h

extern NSString *NSStringFromBOOL(BOOL aBool);

А также добавить следующий код в реализацию:

//NSString+TypeConversion.m

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

Так что теперь вы можете использовать эту функцию в других местах, и ваш код станет более понятным и многократно используемым:

#import "NSString+TypesConversion.h"

NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass:[NSString class]]));
0 голосов
/ 02 августа 2015

Это работа для меня:

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