Sobes.tech
Middle

რომელი დასრულების handler-ი დაწერეთ?

sobes.tech AI

პასუხი AI-სგან

მე დავწერე მრავალი დასრულების დამხმარე ფუნქცია სხვადასხვა დავალებისთვის, მათ შორის:

  • ქსელური მოთხოვნების შედეგების დამუშავება (მონაცემების მიღება, შესრულების სტატუსი).
  • ასინქრონული ოპერაციები მონაცემთა ბაზასთან (შენახვა, კითხვა, განახლება).
  • ფაილური სისტემის ოპერაციები (კითხვა, დაწერა, წაშლა).
  • ანიმაციები და მომხმარებლის ინტერფეისები (ანიმაციების დასრულება, მომხმარებლის მოძრაობების დამუშავება).
  • პერსონალიზებული ასინქრონული ოპერაციები შედეგებისა და შეცდომების გადაცემის შესაძლებლობით.

მაგალითად, როდესაც ვმუშაობ URLSession-თან, ხშირად ვიყენებ ამ ნიმუშს:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // შეცდომის დამუშავება
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // არავალიდური პასუხი ან მონაცემები დამუშავება
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // მონაცემების წარმატებული დამუშავება
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // დეკოდირების შეცდომის დამუშავება
        completion(.failure(error))
    }
}.resume()

სადაც completion არის (Result<SomeModel, Error>) -> Void ტიპის closure. Result-ის გამოყენება საშუალებას იძლევა მკაფიოდ განასხვავოს წარმატებული დასრულება და შეცდომა.