BOOL для NSString

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

Вы печатаете BOOL следующим образом:

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

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

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

Ответ 6

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

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

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

Ответ 7

Прежде всего, вы должны добавить спецификатор форматирования %@. Он должен выглядеть следующим образом:

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

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

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

//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]]));

Ответ 8

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

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