2013-03-24 45 views
5

對於這樣的新手問題抱歉。ObjC:錯誤處理...返回什麼

我寫了一個類方法,它需要三個字符串並返回一個子字符串。

我寫了條件語句,只有在滿足某些條件時才允許返回子字符串。但是,如果無法提取子字符串,我不確定需要返回什麼。目前,我有方法返回一個默認的'錯誤'字符串,但我覺得這可能不是最佳實踐。

這裏是我的方法:

+(NSString *)ExtractSubstringFrom:(NSString *)sourceString 
      Between:(NSString *)firstString And:(NSString *)secondString { 


      NSRange stringRangeOne = [sourceString rangeOfString:secondString]; 
      NSString *resultString; 

      if (stringRangeOne.location != NSNotFound) { 
      resultString = [sourceString substringToIndex:stringRangeOne.location]; 
      } 

      NSRange stringRangeTwo = [sourceString rangeOfString:firstString]; 

      if (stringRangeTwo.location !=NSNotFound) { 
      resultString = [resultString substringFromIndex:stringRangeTwo.location+stringRangeTwo.length]; 
      return resultString; 
      } 

      else return @"Error!"; 

      //To do... improve error checking 

      } 

我怎樣才能使這種方法更友好的錯誤?

回答

6

有處理目標C這樣的錯誤幾種方法:

  • 返回默認值 - 通常情況下,默認值是nil。由於在Objective C中允許對nil對象執行操作,因此這是相對安全的。
  • 生產NSError對象 - 這是最終用戶可以解決的錯誤更典型,如連接和配置問題。這種API的不良副作用是需要設置並傳遞額外的參數。
  • 使用聲明 - 這是處理「編程錯誤」的好方法,即當程序參數超出其指定範圍時。
  • 拋出異常 - 該選項在語言中可用,但Apple強烈建議不要使用它。我在這裏提到它的完整性,即使我自己從未使用這個選項。
+1

+1針對異常警告。 – 2013-03-24 21:19:00

+0

蘋果的文檔對於何時使用每個文檔都非常明確。 「使用Objective-C進行編程:處理錯誤」的標題爲「編程錯誤的例外」。這就是他們的目的。 – quellish 2014-01-27 20:12:35

0

這裏的實際最佳做法是不在類方法內部執行此操作,而是在將要接受該值的對象上實現Key Value Validation,並在設置它之前調用驗證方法。因此,您將從此方法中移除此驗證/變異邏輯,並將其放入您的驗證方法中,並在設置該值之前在控制器中修改該值,稱爲驗證方法。這使您的驗證邏輯有機會修改該值(即默認值),或者如果輸入值不能被強制轉換爲可用的值,則返回錯誤。

有關錯誤在Objective-C處理更多的信息,請閱讀Programming With Objective-C: Dealing with ErrorsError Handling Programming Guide

相關問題