Sobes.tech
Junior — Middle

Kādi ir atšķirības starp async/await un completion handlers izmantošanu darbā ar asīnhrono kodu?

sobes.tech AI

Atbilde no AI

Galvenās atšķirības starp async/await un completion handlers, strādājot ar asīnhrono kodu iOS:

  • Sintakse un lasāmība: async/await ļauj rakstīt asīnhrono kodu secīga stila, kas uzlabo lasāmību un vienkāršo atkļūdošanu. Completion handlers izmanto iekļautas slēdzenes, kas var novest pie "callback hell".

  • Kļūdu apstrāde: ar async/await var izmantot ierasto try/catch mehānismu kļūdu apstrādei, kamēr completion handlers kļūdas parasti tiek nodotas caur parametriem, kas prasa papildu pārbaudi.

  • Saderība: async/await tiek atbalstīts Swift no versijas 5.5 un iOS 15, kamēr completion handlers darbojas visās versijās.

Piemērs ar 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("Saņemti dati: \(data)")
    } catch {
        print("Kļūda: \(error)")
    }
}

Piemērs ar completion handler:

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("Saņemti dati: \(data)")
    case .failure(let error):
        print("Kļūda: \(error)")
    }
}

Tādējādi, async/await atvieglo darbu ar asīnhrono kodu, padara to saprotamāku un ērtāku.