Sobes.tech
Middle

Qual gestore di completamento hai scritto?

sobes.tech AI

Risposta dell'AI

Ho scritto numerosi gestori di completamento per vari compiti, tra cui:

  • Elaborazione dei risultati delle richieste di rete (recupero dati, stato di esecuzione).
  • Operazioni asincrone con database (salvataggio, lettura, aggiornamento).
  • Operazioni del sistema di file (lettura, scrittura, eliminazione).
  • Animazioni e interfacce utente (completamento animazioni, gestione dei gesti utente).
  • Operazioni asincrone personalizzate con trasmissione di risultati ed errori.

Ad esempio, quando lavoro con URLSession, uso spesso questo modello:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // Gestione errore
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // Gestione risposta o dati non validi
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // Elaborazione dati riuscita
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // Gestione errore di decodifica
        completion(.failure(error))
    }
}.resume()

dove completion è una closure di tipo (Result<SomeModel, Error>) -> Void. L'uso di Result permette di distinguere chiaramente tra successo e errore.