Ответ 1
В строке формата вам понадобится спецификатор форматирования:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Если у меня есть метод, который возвращает BOOL
, как мне его применить к NSString
, чтобы я мог распечатать его на консоли?
Например, я попытался сделать это, что не работает:
NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Но я действительно хочу на самом деле превратить возвращаемое значение в NSString. Я знаю, что это примитивный тип данных, поэтому я не могу вызывать методы на нем. Нужно ли создавать строку отдельно, а затем использовать Bool в качестве параметра в методе на NSString?
В строке формата вам понадобится спецификатор форматирования:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Используйте тернарный оператор:
BOOl isKind= [thing isKindOfClass:[NSString class]];
NSLog(@"Is Kind of NSString: %d", isKind);
NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO");
В фоновом режиме 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
Итак, я знаю, что это действительно старо, но я подумал, что я мог бы бросить мое решение на ринг. Я:
#define NSStringFromBOOL(aBOOL) ((aBOOL) ? @"YES" : @"NO")
NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass: [NSString class]]);
Я чувствую, что это больше соответствует некоторым макросам Apple для строки (NSStringFromClass
, NSStringFromRect
, NSStringFromSelector
и т.д.) и, как правило, довольно проста в использовании на лету. Просто убедитесь, что этот макрос доступен где-то в глобальном масштабе или часто импортируется!
Вы печатаете BOOL следующим образом:
NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO");
Или, с новой нотой @
, можно было бы сделать:
NSLog(@"The BOOL value is %@", @(theBoolValue));
NSLog использует простой формат вызова в стиле printf, а в вашем примере кода отсутствует последовательность символов, необходимая для встраивания объекта.
Это должно работать:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Прежде всего, вы должны добавить спецификатор форматирования %@
.
Он должен выглядеть следующим образом:
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]]));
Это работа для меня:
NSLog(@"The BOOL value is %@", theBoolValue ? "YES" : "NO");