Sobes.tech
Middle

Ce handler de finalizare ai scris?

sobes.tech AI

Răspuns de la AI

Am scris numeroase handler-uri de finalizare pentru diferite sarcini, inclusiv:

  • Procesarea rezultatelor solicitărilor de rețea (obținerea datelor, starea de execuție).
  • Operații asincrone cu baze de date (salvare, citire, actualizare).
  • Operații ale sistemului de fișiere (citire, scriere, ștergere).
  • Animații și interfețe de utilizator (finalizarea animațiilor, gestionarea gesturilor utilizatorului).
  • Operații asincrone personalizate cu posibilitatea de a transmite rezultate și erori.

De exemplu, când lucrez cu URLSession, folosesc adesea acest model:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // Tratarea erorii
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // Tratarea răspunsului sau datelor nevalide
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // Procesarea cu succes a datelor
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // Tratarea erorii de decodare
        completion(.failure(error))
    }
}.resume()

unde completion este o închidere de tip (Result<SomeModel, Error>) -> Void. Utilizarea Result permite o diferențiere clară între finalizarea cu succes și eroare.