Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
import Foundation // Result type enum APIError: Error { case invalidURL case networkError(String) case decodingError } func fetchUser(id: Int, completion: @escaping (Result<User, APIError>) -> Void) { guard let url = URL(string: "https://api.example.com/users/\(id)") else { completion(.failure(.invalidURL)) return } URLSession.shared.dataTask(with: url) { data, response, error in if let error = error { completion(.failure(.networkError(error.localizedDescription))) return } guard let data = data else { completion(.failure(.networkError("No data"))) return } guard let user = try? JSONDecoder().decode(User.self, from: data) else { completion(.failure(.decodingError)) return } completion(.success(user)) }.resume() } // Handling Result fetchUser(id: 1) { result in switch result { case .success(let user): print("Got user: \(user)") case .failure(let error): print("Error: \(error)") } } // map / flatMap on Result let result: Result<String, Error> = .success("42") let parsed = result.flatMap { str -> Result<Int, Error> in guard let n = Int(str) else { return .failure(APIError.decodingError) } return .success(n) }
Result
Open