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 (
successifailure), zapobiegając pominięciu obsługi błędów. - Lepsza czytelność: Kod korzystający z
Resultjest ł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
}
}