我一直在寻找在谷歌的几个搜索结果和发现各种方式来测试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)
。
我误会了什么吗?如果值为nil
或真正为空,我如何编写一个可返回空白NSString
值的类别?
谢谢!
发送消息'nil'对象不会被调用。它只是返回零。您需要将它们定义为类方法。 – ozgur
@ozgur啊,所以即使我将'name'定义为'NSString',给它'nil'死亡不允许调用'NSString'方法吗? – RoLYroLLs
给nil的消息不做任何事情,并根据类型返回'nil,Nil,NULL,0或0.0'。所以是的,你是对的。 – ozgur