Sobes.tech
Junior — Middle

Asinxron kod bilan ishlashda async/await va yakunlash handlerlari o'rtasidagi farqlar nimalardan iborat?

sobes.tech AI

AIdan javob

iOS'da asinxron kod bilan ishlashda async/await va yakunlash handlerlari o'rtasidagi asosiy farqlar:

  • Sintaksis va o'qilishi: async/await asinxron kodni ketma-ket uslubda yozishga imkon beradi, bu o'qishni yaxshilaydi va xatolarni aniqlashni osonlashtiradi. Yakunlash handlerlari ichma-ich yopishqoq yopishqoq bo'laklarni ishlatadi, bu "callback jannati"ga olib kelishi mumkin.

  • Xatolarni boshqarish: async/await bilan odatiy try/catch mexanizmini ishlatish mumkin, xatolar odatda parametrlar orqali uzatiladi, bu esa qo'shimcha tekshiruvlarni talab qiladi.

  • Moslik: async/await Swift 5.5 va iOS 15 dan boshlab qo'llab-quvvatlanadi, yakunlash handlerlari esa barcha versiyalarda ishlaydi.

Async/await bilan misol:

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("Qabul qilingan ma'lumotlar: \(data)")
    } catch {
        print("Xato: \(error)")
    }
}

Yakunlash handleri bilan misol:

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("Qabul qilingan ma'lumotlar: \(data)")
    case .failure(let error):
        print("Xato: \(error)")
    }
}

Shu bilan async/await asinxron kod bilan ishlashni soddalashtiradi, uni tushunarli va qulay qiladi.