Sobes.tech
Junior — Middle

Asenkron kodla çalışırken async/await ve tamamlayıcı işleyicilerin kullanımı arasında ne gibi farklar vardır?

sobes.tech yapay zeka

AI'dan gelen yanıt

iOS'ta asenkron kodla çalışırken async/await ile tamamlanma işleyicileri arasındaki temel farklar:

  • Sözdizimi ve okunabilirlik: async/await, asenkron kodu sıralı tarzda yazmaya olanak tanır, bu da okunabilirliği artırır ve hata ayıklamayı kolaylaştırır. Tamamlanma işleyicileri iç içe kapanan kapanışlar kullanır, bu da "geri çağrı cehennesi"ne yol açabilir.

  • Hata işleme: async/await ile geleneksel try/catch mekanizması kullanılarak hata işlenebilir, oysa tamamlanma işleyicilerinde hatalar genellikle parametreler aracılığıyla iletilir, bu da ek kontrol gerektirir.

  • Uyumluluk: async/await, Swift 5.5 ve iOS 15'ten itibaren desteklenirken, tamamlanma işleyicileri tüm sürümlerde çalışır.

async/await ile örnek:

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("Veri alındı: \(data)")
    } catch {
        print("Hata: \(error)")
    }
}

Tamamlanma işleyicisi ile örnek:

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("Veri alındı: \(data)")
    case .failure(let error):
        print("Hata: \(error)")
    }
}

Bu nedenle, async/await asenkron kodla çalışmayı basitleştirir, onu daha anlaşılır ve kullanışlı hale getirir.