Sobes.tech
Intern

Jaka jest twoja ulubiona funkcja w Swift?

sobes.tech AI

Odpowiedź od AI

Result jest typem wyliczeniowym. Umożliwia bardziej jawne obsługiwanie pomyślnego wykonania lub błędu operacji, co czyni kod bezpieczniejszym i bardziej czytelnym.

enum Result<Success, Failure> where Failure : Error {
    case success(Success) // Pomyślny wynik z wartością powiązaną typu Success
    case failure(Failure) // Wynik błędu z wartością powiązaną typu Failure
}

Zalety korzystania z Result:

  • Jawne oznaczenie: Widać wyraźnie, że funkcja może zwrócić albo wartość sukcesu, albo błąd.
  • Bezpieczeństwo: Kompilator wymusza obsługę obu przypadków (success i failure), zapobiegając pominięciu obsługi błędów.
  • Lepsza czytelność: Kod korzystający z Result jest łatwiejszy do zrozumienia, ponieważ intencja funkcji jest oczywista.
  • Kompatybilność: Dobrze integruje się z operacjami asynchronicznymi i obsługą błędów.

Przykład użycia:

func fetchData(from url: URL, completion: @escaping (Result<Data, Error>) -> Void) {
    URLSession.shared.dataTask(with: url) { data, response, error in
        if let error = error {
            completion(.failure(error)) // Przekazanie błędu przez failure
            return
        }
        if let data = data {
            completion(.success(data)) // Przekazanie danych przez success
            return
        }
        // Obsługa nieoczekiwanych scenariuszy, jeśli konieczne
    }.resume()
}

// Użycie funkcji
let someURL = URL(string: "https://example.com")!
fetchData(from: someURL) { result in
    switch result {
    case .success(let data):
        print("Dane otrzymane: \(data)") // Obsługa sukcesu
    case .failure(let error):
        print("Błąd podczas pobierania danych: \(error.localizedDescription)") // Obsługa błędu
    }
}