es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema en el código proporcionado es que el método fetchAllFavor() está intentando devolver un valor de MyResults 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 de completion para pasar los datos obtenidos al llamador. Aquí tienes un ejemplo actualizado:

    func fetchAllFavors(completion: @escaping (Result<[MyResults], Error>) -> Void) {
        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):
                completion(.success(myResults))
            case .failure(let error):
                completion(.failure(error))
            }
        }
    }
    
    // Uso:
    fetchAllFavors { result in
        switch result {
        case .success(let myResults):
            // Usa myResults para actualizar tu vista de tabla
        case .failure(let error):
            print("Error al obtener datos: \(error)")
        }
    }
    

    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 tipo T (el resultado de una operación exitosa), o failure con un valor de tipo Error (el error que ocurrió durante una operación sin éxito).

Comments are closed.