或者返回值澄清

时间:2013-06-11 13:44:12

标签: objective-c

我仍然在学习Objective-C,而且这段代码看起来很奇怪而且难以获得良好的搜索结果。

@interface Practice : NSObject 
{
   NSString *name;
   NSString *sortKey;
}

- (NSComparisonResult)sortPack:(Practice *)other
{
    return [[self sortKeyOrName] caseInsensitiveCompare:[other sortKeyOrName]]; 
}

这是我的问题:

  1. [self sortKeyOrName]中的“Or”可以是两个变量吗?如果是这样,它如何确定要采用哪个变量?

  2. 此过程如何处理?这是我对此的看法,它比较其他和sortKeyOrName然后返回,如果它的asc,desc或相同,并返回分配给[self sorkeyOrName]的值?

  3. 谢谢。

1 个答案:

答案 0 :(得分:1)

首先,我建议你清楚地阅读Learning Objective-c,但是你并不完全理解这种语言,但是我已经多年来一直这样做,而且我并不完全理解这种语言。

实例变量namesortKey与方法sortPack:无关。所以 NO “或”并不意味着它可以是两个变量中的任何一个,sortKeyOrName是方法调用。

方法由三个组件组成,第一个是返回类型,因此在sortPack:的情况下,返回类型为NSComparisonResult。然后有一个方法名sortPack,最后是other参数,它必须是Practise *个对象。

因此,您可以将此方法称为NSComparisonResult result = [self sortPack:object];

知道这一点,我们现在可以查看此方法正在做什么,因为我们现在sortPack返回NSComparisonResult,这意味着[[self sortKeyOrName] caseInsensitiveCompare:[other sortKeyOrName]];必须返回NSComparisonResult也是。

这个[[self sortKeyOrName] caseInsensitiveCompare:[other sortKeyOrName]];正在做的是首先从[self sortKeyOrName]得到一些结果,因为这是一个方法调用,返回一些东西,然后它将它与从[other sortKeyOrName]返回的内容进行比较。也是另一种返回东西的方法调用。所以我们可以把它看作是比较[@"SomeString" caseInsensitiveCompare:@"AnotherString"];(不确定两种方法返回所以猜测字符串)

比较这两个后,它会将sortPack的结果作为NSComparisonResult返回。

希望你能从链接中更好地理解这一点。