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-ის გამოყენება საშუალებას იძლევა მკაფიოდ განასხვავოს წარმატებული დასრულება და შეცდომა.