2013-03-24 14 views
5

Przeprosiny za takie pytanie dla początkujących.ObjC: Obsługa błędów ... co zwrócić

Napisałem metodę klasy, która pobiera trzy ciągi i zwraca podciąg.

Mam zapisane instrukcje warunkowe, które zezwalają tylko na zwracanie podciągu, jeśli spełnione są określone kryteria. Jednak nie jestem pewien, co muszę zwrócić, jeśli podciągu nie można wyodrębnić. W tej chwili mam metodę zwracającą domyślny ciąg znaków "błąd", ale mam wrażenie, że może to nie być najlepsza praktyka.

Oto moja metoda:

+(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 

      } 

Jak mogę uczynić ten sposób bardziej przyjazny błąd?

Odpowiedz

6

Istnieje kilka sposobów obsługi błędów tego rodzaju w Objective C:

  • Powracający wartość domyślną - typowo, wartość domyślna to nil. Ponieważ wykonywanie operacji na obiektach nil jest dozwolone w Objective C, jest to względnie bezpieczne.
  • Tworzenie obiektów - jest to bardziej typowe dla błędów, które mogą być rozwiązywane przez użytkowników końcowych, takich jak problemy z połączeniem i konfiguracją. Niefortunnym efektem ubocznym tego rodzaju API jest konieczność skonfigurowania i przekazania dodatkowego parametru.
  • Korzystanie z twierdzenia - jest to dobry sposób postępowania z "błędami programowania", tj. Gdy argumenty programu znajdują się poza określonymi zakresami.
  • Zgłaszanie wyjątku - ta opcja jest dostępna w języku, ale Apple zdecydowanie odradza jej używanie. Wspominałem o tym tutaj dla kompletności, mimo że sam nigdy nie korzystałem z tej opcji.
+1

+1 do ostrzegania przed wyjątkami. –

+0

Dokumentacja Apple wyraźnie określa, kiedy należy korzystać z każdej z nich. "Programowanie z Objective-C: Radzenie sobie z błędami" ma całą sekcję zatytułowaną "Wyjątki dotyczą błędów programistycznych". Po to są. – quellish

0

Rzeczywista najlepszych praktyk tutaj byłoby nie rób tego wewnątrz metody klasy, ale zamiast realizować Key Value Validation na rzeczy, które będą akceptując wartość, a wywołanie metody weryfikacji, zanim zostanie ustawiona. Aby usunąć tę logikę walidacji/mutacji z tej metody i umieścić ją w swojej metodzie sprawdzania poprawności, w sterowniku wartość jest modyfikowana nazywana metodą sprawdzania poprawności przed ustawieniem wartości. Daje to logice walidacji możliwość modyfikacji wartości (tj. Wartości domyślnej) lub zwraca błąd, jeśli wartość wejściowa nie może zostać przekształcona w coś użytecznego.

Aby uzyskać więcej ogólnych informacji na temat obsługi w Objective-C błędu, patrz Programming With Objective-C: Dealing with Errors i Error Handling Programming Guide