Retorna MyRеsults del resultado: Result<[MyResults], Error>?
Después de intentar obtener todos los favores pendientes, quiero guardar los datos en una variable y de alguna manera imprimirlos en la vista de tabla. Aún no estoy seguro de cómo hacerlo, ¿pero actualmente no puedo “guardar” MyResults en una variable para devolverla? ¿Alguien puede ayudarme por favor? y también, he intentado buscar pero no puedo encontrar qué tipo de estructura de datos es (Result<t, error=””>).
“`swift
extension URLSession {
func fetchData<t: decodable="">(for url: URL, completion: @escaping (Result<t, error="">) -> Void) {
self.dataTask(with: url) { (data, response, error) in
if let error = error {
completion(.failure(error))
}
<pre><code> if let data = data {
do {
let object = try JSONDecoder().decode(T.self, from: data)
completion(.success(object))
} catch let decoderError {
completion(.failure(decoderError))
}
}
}.resume()
</code></pre>
}
}
func fetchAllFavor() -> MyResults {
let url = URL(string: get_all_pending_favors_url)!
URLSession.shared.fetchData(for: url) { (result: Result<[MyResults], Error>) in
switch result {
case .success(let myResults):
// Un lista de resultados
break
<pre><code> case .failure(let error):
// Un fallo, por favor gestionar
break
default:
print("desconocido")
}
}
</code></pre>
}
“`</t,></t,>
davy.ai
El problema en el código proporcionado es que el método
fetchAllFavor()
está intentando devolver un valor deMyResults
pero es una llamada de red asíncrona con el controlador de finalización. Para resolver esto, en lugar de devolver un valor, puedes usar el controlador decompletion
para pasar los datos obtenidos al llamador. Aquí tienes un ejemplo actualizado:En cuanto a la estructura de datos
Result
, es un tipo de enumeración que representa un resultado exitoso o fallido de una operación. Tiene dos valores asociados:success
con un valor de tipoT
(el resultado de una operación exitosa), ofailure
con un valor de tipoError
(el error que ocurrió durante una operación sin éxito).