Асинхрондук код менен иштөөдө 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 асинхрондук ишти жөнөкөйлөтүп, аны түшүнүү жана колдонуу оңой кылат.