NSString: Return 值或空字符串
NSString: Return value or Empty string
我一直在查看多个 Google 搜索结果,并找到了各种方法来测试 NSString
与 nil
等
所以我决定为 NSString
编写一些 category
方法来提供帮助。但是它没有按预期工作,我想知道是否有人可以帮助我找出原因并提供可能的解决方案帮助。
这就是我想出的:
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
背后的想法是如果对象是 nil
或长度为 0,则强制结果为空 NSString
(而不是 nil
)。
测试:
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
或真正为空,我如何编写一个 return 空白 NSString
值的类别?
谢谢!
nil
不是 NSString
或任何对象的实例,因此您无法使用实例方法处理 nil
。
发给 nil
的消息什么都不做,甚至都不会被调用。它只是简单地 returns nil
。您需要将它们定义为 class 方法:
@interface NSString (Extensions)
+ (NSString *)stringOrNil:(NSString *)string;
+ (NSString *)stringOrEmpty:(NSString *)string;
@end
--
@implementation NSString (Extensions)
+ (NSString *)stringOrNil:(NSString *)string {
return string.length ? string : nil;
}
+ (NSString *)stringOrEmpty:(NSString *)string {
return string ? string : @"";
}
@end
您可以这样称呼它们:
NSString *name = nil;
NSLog(@"%@", [NSString stringOrEmpty:name]); // result: ("")
我一直在查看多个 Google 搜索结果,并找到了各种方法来测试 NSString
与 nil
等
所以我决定为 NSString
编写一些 category
方法来提供帮助。但是它没有按预期工作,我想知道是否有人可以帮助我找出原因并提供可能的解决方案帮助。
这就是我想出的:
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
背后的想法是如果对象是 nil
或长度为 0,则强制结果为空 NSString
(而不是 nil
)。
测试:
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
或真正为空,我如何编写一个 return 空白 NSString
值的类别?
谢谢!
nil
不是 NSString
或任何对象的实例,因此您无法使用实例方法处理 nil
。
发给 nil
的消息什么都不做,甚至都不会被调用。它只是简单地 returns nil
。您需要将它们定义为 class 方法:
@interface NSString (Extensions)
+ (NSString *)stringOrNil:(NSString *)string;
+ (NSString *)stringOrEmpty:(NSString *)string;
@end
--
@implementation NSString (Extensions)
+ (NSString *)stringOrNil:(NSString *)string {
return string.length ? string : nil;
}
+ (NSString *)stringOrEmpty:(NSString *)string {
return string ? string : @"";
}
@end
您可以这样称呼它们:
NSString *name = nil;
NSLog(@"%@", [NSString stringOrEmpty:name]); // result: ("")