Sobes.tech
Middle

Jaký jste napsali completion handler?

sobes.tech AI

Odpověď od AI

Napsal jsem mnoho handlerů pro dokončení různých úkolů, včetně:

  • Zpracování výsledků síťových požadavků (získání dat, stav provádění).
  • Asynchronní operace s databázemi (uložení, čtení, aktualizace).
  • Operace souborového systému (čtení, zápis, mazání).
  • Animace a uživatelská rozhraní (dokončení animací, zpracování gest uživatele).
  • Vlastní asynchronní operace s možností přenosu výsledků a chyb.

Například při práci s URLSession často používám tento vzor:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // Zpracování chyby
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // Zpracování neplatné odpovědi nebo dat
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // Úspěšné zpracování dat
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // Zpracování chyby dekódování
        completion(.failure(error))
    }
}.resume()

kde completion je closure typu (Result<SomeModel, Error>) -> Void. Použití Result umožňuje jasně rozlišit úspěšné dokončení a chybu.