Sobes.tech
Middle

Welke completion handler heb je geschreven?

sobes.tech AI

Antwoord van AI

Ik heb talloze completion handlers geschreven voor verschillende taken, waaronder:

  • Verwerking van resultaten van netwerkverzoeken (gegevens ophalen, uitvoeringsstatus).
  • Asynchrone operaties met databases (opslaan, lezen, bijwerken).
  • Besturingssysteemoperaties (lezen, schrijven, verwijderen).
  • Animaties en gebruikersinterfaces (voltooien van animaties, verwerken van gebruikersgebaren).
  • Aangepaste asynchrone operaties met de mogelijkheid om resultaten en fouten door te geven.

Bijvoorbeeld, bij het werken met URLSession gebruik ik vaak dit patroon:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // Foutafhandeling
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // Afhandeling van ongeldige reactie of gegevens
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // Succesvolle verwerking van gegevens
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // Fout bij decodering
        completion(.failure(error))
    }
}.resume()

waar completion een closure is van het type (Result<SomeModel, Error>) -> Void. Het gebruik van Result maakt een duidelijke scheiding mogelijk tussen succesvolle afronding en fouten.