2013-06-11 46 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的結果。

希望你能從鏈接中更好地理解這一點。