Sobes.tech
Middle

Aký ste napísali handler dokončenia?

sobes.tech AI

Odpoveď od AI

Napísal som mnoho handlerov na dokončenie pre rôzne úlohy, vrátane:

  • Spracovanie výsledkov sieťových požiadaviek (získanie dát, stav vykonávania).
  • Asynchrónne operácie s databázami (uloženie, čítanie, aktualizácia).
  • Operácie súborového systému (čítanie, zápis, mazanie).
  • Animácie a používateľské rozhrania (ukončenie animácií, spracovanie gest používateľa).
  • Vlastné asynchrónne operácie s možnosťou prenosu výsledkov a chýb.

Napríklad, pri práci s URLSession často používam tento vzor:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // Spracovanie chyby
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // Spracovanie neplatnej odpovede alebo dát
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // Úspešné spracovanie dát
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // Spracovanie chyby dekódovania
        completion(.failure(error))
    }
}.resume()

kde completion je closure typu (Result<SomeModel, Error>) -> Void. Použitie Result umožňuje jasne rozlíšiť medzi úspešným ukončením a chybou.