რა განსხვავებები არსებობს async/await-ის გამოყენებასა და დასრულების handlers-ის გამოყენებას შორის ასინქრონული კოდის მუშაობისას?
sobes.tech AI
პასუხი AI-სგან
async/await და დასრულების დამხმარე ფუნქციებს შორის ძირითადი განსხვავებები iOS-ში ასინქრონული კოდის მუშაობისას:
-
სინტაქსი და წაკითხვა: async/await საშუალებას აძლევს დაწეროთ ასინქრონული კოდი სერიული სტილში, რაც აუმჯობესებს წაკითხვას და გამარტივებს დათვალიერებას. დასრულების დამხმარე ფუნქციები იყენებენ ჩაშენებულ დახურვებს, რაც შეიძლება გამოიწვიოს "callback hell".
-
შეცდომების მართვა: async/await-ის გამოყენებით შესაძლებელია ჩვეულებრივი try/catch მექანიზმის გამოყენება შეცდომების მართვისთვის, მაშინ როდესაც დასრულების დამხმარე ფუნქციებში შეცდომები ჩვეულებრივ გადაეცემა პარამეტრებით, რაც საჭიროებს დამატებით შემოწმებას.
-
სათანადროვე მხარდაჭერა: async/await მხარდაჭერილია Swift-ში დაწყებული ვერსიით 5.5 და iOS 15-დან, ხოლო დასრულების დამხმარე ფუნქციები მუშაობს ყველა ვერსიაში.
მაგალითი async/await-ის გამოყენებით:
func fetchData() async throws -> Data {
let url = URL(string: "https://example.com/data")!
let (data, _) = try await URLSession.shared.data(from: url)
return data
}
Task {
do {
let data = try await fetchData()
print("Data received: \(data)")
} catch {
print("Error: \(error)")
}
}
მაგალითი დასრულების დამხმარე ფუნქციით:
func fetchData(completion: @escaping (Result<Data, Error>) -> Void) {
let url = URL(string: "https://example.com/data")!
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
completion(.failure(error))
return
}
if let data = data {
completion(.success(data))
}
}.resume()
}
fetchData { result in
switch result {
case .success(let data):
print("Data received: \(data)")
case .failure(let error):
print("Error: \(error)")
}
}
ამგვარად, async/await გამარტივებს ასინქრონული კოდის მუშაობას, ხდის მას უფრო გასაგებ და მოსახერხებელს.