对于某个类别,这可能是不可能的,但为了防止它变得可行,我想找出答案。
我在NSString
上写了一个类别,我有一个类别方法,用逗号分隔的字符串解析为NSArray
清理额外的逗号和空格,并修剪结尾......所以比类似功能的内置方法。虽然如此,如果字符串是nil
怎么办?有什么方法可以返回带有0个对象的初始化NSArray
而不是返回nil
吗?
场景将会是这样的......
NSArray *parsed = [someString parseStringIntoArray];
...假设someString
为nil
。我可以以某种方式获得一个初始化的数组吗?
显然有办法解决这个问题,但要保持清洁和简洁,并使用类别方法......是否可能?
答案 0 :(得分:2)
没有。但是,是的,如果你做了一些改变:
由于您调用实例方法,因此无法正常工作。当您向nil
发送消息(也就是在nil对象上调用方法)时,您将始终获得nil
。
这是nil本身的关键概念。
您可以添加一个类方法,然后在此类方法中,您可以针对nil
进行测试并返回一个空数组:
+ (NSArray *)parseStringIntoArray:(NSString *)string {
return [string componentsSeparatedByString:@","] ?: @[];
}
或者您可以简单地使用NSString
内置的内容:
NSArray *parts = [@"foo,bar,la,le,lu" componentsSeparatedByString:@","] ?: @[];
修改强>
答案 1 :(得分:1)
不,没有办法从发送到nil
的邮件中返回任何内容。这是运行时的核心:objc_msgSend()
is responsible for this behavior。
如果接收方为nil
,objc_msgSend()
将表达式解析为方法返回类型的相应0值。
您必须在之前或之后测试nil
并手动更改数组的值。
(顺便说一句,这是一种类别方法的事实是无关紧要的。)