Sobes.tech
Middle

Koji ste završni handler napisali?

sobes.tech АИ

Одговор од АИ

Napisao sam mnogo handlera za završetak za različite zadatke, uključujući:

  • Obradu rezultata mrežnih zahteva (dobijanje podataka, status izvršenja).
  • Asinhrone operacije sa bazama podataka (čuvanje, čitanje, ažuriranje).
  • Operacije fajl sistema (čitanje, pisanje, brisanje).
  • Animacije i korisnički interfejsi (završetak animacija, obrada gestova korisnika).
  • Prilagođene asinhrone operacije sa mogućnošću prenosa rezultata i grešaka.

Na primer, kada radim sa URLSession, često koristim ovaj obrazac:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // Obrada greške
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // Obrada nevažećeg odgovora ili podataka
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // Uspešna obrada podataka
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // Obrada greške dekodiranja
        completion(.failure(error))
    }
}.resume()

gde je completion closure tipa (Result<SomeModel, Error>) -> Void. Korišćenje Result omogućava jasnu razliku između uspešnog završetka i greške.