Я глядя на несколько результатах поиска Google и нашел различные способы тестирования в NSString
для nil
и т.д.NSString: Возвращаемое значение или пустая строка
Так что я решил написать некоторые category
метод NSString
к Помогите. Однако он работает не так, как ожидалось, и мне интересно, может ли кто-нибудь помочь мне понять, почему и возможная помощь в решении.
Так вот что я придумал:
NSString+Extenstions.h
#import
@interface NSString (Extensions)
- (NSString *)stringOrNil;
- (NSString *)stringOrEmpty;
@end
NSString+Extenstions.m
#import "NSString+Extensions.h"
@implementation NSString (Extensions)
- (NSString *)stringOrNil {
return self == nil || [self length] == 0 ? nil : self;
}
- (NSString *)stringOrEmpty {
return [self stringOrNil] == nil ? @"" : self;
}
@end
Так идея stringOrEmpty
, чтобы заставить результат как пустой NSString
(не nil
), если объект nil
или длина равна 0.
Тестирование:
NSString *name = nil;
NSLog(@"%@", [name stringOrEmpty]); // result: (null)
Я ожидал, приведенный выше результат, чтобы быть пустым, но консоль вошли как (null)
. S Я изменил метод stringOrEmpty
на return [[self stringOrNil] length] == 0 ? @"yes" : @"no";
и ожидал увидеть yes
, но снова получил (null)
. Кажется, stringOrEmpty
не вызывается.
И, наконец, я протестировал следующее: NSLog(@"%@", [name class]);
и снова результат был (null)
.
Я что-то не понимаю? Как написать категорию, которая вернет пустое значение NSString
, если значение nil
или действительно пустое?
Спасибо!
Отправка сообщения 'nil' объект не дозвонились , Он просто возвращает ноль. Вы должны определить их как методы класса. – ozgur
@ozgur ах, поэтому, хотя я определяю 'имя' как' NSString', давая ему 'nil', не разрешает вызов методам' NSString'? – RoLYroLLs
Сообщение nil ничего не делает и возвращает 'nil, Nil, NULL, 0 или 0.0' в зависимости от типа. Так что, ты прав. – ozgur