Sobes.tech
Middle

Kādu pabeigšanas apstrādātāju jūs uzrakstījāt?

sobes.tech AI

Atbilde no AI

Esmu uzrakstījis daudz pabeigšanas apstrādātāju dažādiem uzdevumiem, tostarp:

  • Tīkla pieprasījumu rezultātu apstrādi (datu iegūšanu, izpildes statusu).
  • Asinhronas operācijas ar datu bāzēm (glabāšanu, lasīšanu, atjaunināšanu).
  • Failu sistēmas operācijas (lasīšanu, rakstīšanu, dzēšanu).
  • Animācijas un lietotāja saskarnes (animāciju pabeigšanu, lietotāja žestu apstrādi).
  • Personalizētas asinhronas operācijas ar rezultātu un kļūdu nodošanas iespēju.

Piemēram, strādājot ar URLSession, bieži izmantoju šo paraugu:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // Kļūdas apstrāde
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // Nederīga atbilde vai dati
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // Datu veiksmīga apstrāde
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // Dekodēšanas kļūdas apstrāde
        completion(.failure(error))
    }
}.resume()

kur completion ir (Result<SomeModel, Error>) -> Void tipa aizvērums. Result izmantošana ļauj skaidri atšķirt veiksmīgu pabeigšanu un kļūdu.