Sobes.tech
Junior — Middle

Асинхрондук код менен иштөөдө async/await жана completions handlers колдонууда кандай айырмачылыктар бар?

sobes.tech AI

AIден жооп

iOS-та асинхрондук код менен иштөөдө async/await жана аяктоо иштеткичтери арасындагы негизги айырмачылыктар:

  • Синтаксис жана окумдуулук: async/await асинхрондук кодду үзгүлтүксүз стилиде жазууга мүмкүндүк берет, бул окумдуулукка жакшыртуу жана ката табууну жеңилдетет. Аяктоо иштеткичтери ички жабдыктарды колдонушат, бул "callback жоолугуна" алып келиши мүмкүн.

  • Ката иштетүү: 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)")
    } catch {
        print("Ката: \(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)")
    case .failure(let error):
        print("Ката: \(error)")
    }
}

Ошентип, async/await асинхрондук ишти жөнөкөйлөтүп, аны түшүнүү жана колдонуу оңой кылат.