Sobes.tech
Junior — Middle

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