我一直在尋找在谷歌的幾個搜索結果和發現各種方式來測試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