2013-06-11 44 views
-1

我仍然在学Objective-C,这段代码看起来很奇怪,很难得到一个好的搜索结果。Or和返回值说明

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

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

我的问题是:

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

  2. 该调用过程如何工作?这是我对此的看法,它比较其他和sortKeyOrName然后返回,如果它的asc,desc,或者相同,并且返回的值被赋值给[self sorkeyOrName]?

谢谢。

+0

从哪里得到这段代码? – CRDave

+0

请阅读http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/主要“方法和消息”。 – Popeye

+2

'name'和'sortKey'与'sortPack'函数无关。 '[self sortkeyOrName]'是一个方法调用。 '[[self sortKeyOrName] caseInsensitiveCompare:[other sortKeyOrName]];'的结果将作为'NSComparisonResult'返回给'sortPack:'方法的任何调用。 – Popeye

回答

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的结果。

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