2012-11-09 28 views
7

我正在爲NSArray設計一個類別,並且我實現的功能之一是設計返回數組中的字符串數目(或不是數字)。這一切工作正常,但我的問題是有關使用NSNotFound作爲輸入數組爲零時的返回。爲NSUInteger返回NSNotFound是否明智?

蘋果的文檔狀態:

NSNotFound通常用於通過各種方法和功能 搜索串行數據項,並返回指數,如在字符串對象中的字符 或IDS在一個NSArray對象。

如果我將indexOfObject:用於不在數組中的項目,這是完全有意義的。但是,在使用NSNotFound的情況下,正確的用法如下所示?當然,我可以返回零並在一天內給它打電話,但看到2147483647並立即知道問題出在哪裏會很有幫助。

- (NSUInteger)countOfStringsInArray { 
    NSUInteger currentCount = 0; 
    if ([self count] > 0) { 
     for (id obj in self) { 
      if (![obj integerValue]) { 
       currentCount ++; 
      } 
     } 
     return currentCount; 
    } 
    return NSNotFound; 
} 

回答

5

不,不是在這種情況下。該示例中的方法返回計數。您會考慮在返回索引的方法上使用/返回NSNotFound(例如),其中0也是的有效索引並因此爲錯誤表示結果。

因此,「是的,你應該簡單地返回0和返回類型應該是無符號(NSUInteger)」,因爲NSNotFound應該關聯到一個計數。這確實涵蓋了你的案例,而不依賴於魔法價值。

如果你喜歡知道問題出在哪裏(而且我經常這樣做),我發現最好是在程序集錯誤時調用方法錯誤。

2

我不認爲一個計數可以稱爲NSNotFound。計數只能是0或更多。在我看來,它永遠不可能是'找不到'。如果是這樣的話[NSArray count]應該在數組爲空或數組爲零時返回NSNotFound,對嗎?所以總之,我覺得在這種特殊情況下使用NSNotFound不是一個標準的方法。至少蘋果公司從來沒有這樣用過。

也許你可以使用零作爲默認情況,否則你可能必須定義自己的枚舉來表示它。 NSNotFound僅在您不能使用零作爲默認值時纔有用(對於這些情況,如果可以接受則可以將-1作爲默認值,或者可以使用NSNotFound,因爲那代表NSIntegerMax)。

1

我看到你來自哪裏,特別是建議使用NSNotFound。但是,對於繼承此代碼的後續開發人員,我認爲您的建議實施不會很直觀。

我會建議使用NSRange返回值來代替。根據Apple的定義,NSRange是「用於描述系列的一部分的結構,例如字符串中的字符或NSArray對象中的對象。」這正是你得到的。

具體而言,NSRange的位置成員可以是您在數組中找到的第一個字符串的索引,並且長度成員可以是您找到的字符串的數量。

和其他返回NSRange的方法(例如,NSString:rangeOfString)一樣,如果找不到字符串,可以將位置設置爲NSNotFound。

希望有所幫助。

0

NSNotFound是無符號整數 所以你應該從NSInteger的方法返回它,因爲它會被縮短,是錯誤的(潛在的)

是說:**你的方法「countOfStringsInArray」應該返回否NSUInteger(同as nsarray.count)

相關問題