İçeriğe geç

Swift 5.5 ile Async let bindings

Merhabalar Swift 5.5 ile aramıza katılan async/await işleminin diğer bir kullanımı olan async let örneğini sizlerle paylaşacağım.

Basit sözdizimi ile async let’i kullanarak alt görevler oluşturmak oldukça kolay. Bu, özellikle heterojen sonuç türleriyle uğraştığınız görev gruplarına bir alternatif olarak yararlıdır. Yani, bir gruptaki görevlerin farklı türde veriler döndürmesini istiyorsanız kullanmanız doğru olacaktır.

Bunu özelliği göstermek için, iki farklı eşzamansız işlevden gelecek iki farklı türde özelliğe sahip bir yapı oluşturabiliriz:

struct UserList {
    var names: [String]
    var ages: [Int]
}

func getUserNames() async -> [String] {
    ["Kenan", "John", "Eric", "Lui"]
}

func getUserAges() async -> [Int] {
    [26, 35, 21, 19]
}
func printUserList() async {
    async let userNames = getUserNames()
    async let userAges = getUserAges()
    let userListItem = await UserList(names: userNames, ages: userAges)
    print("\(userListItem.names) - \(userListItem.ages)")
}

Böylece async fonksiyonları teker teker işletilecek ve UserList objesi oluşmak için bekleyecektir.

Eğer fonksiyon throw fırlatıcak ise async let ile birlikte try kullanmanıza gerek yok.

func getUserAges(status: Bool) async throws -> [Int] {
    if status {
        return [26, 35, 21, 19]
    } else {
        throw NSError(domain: "com.example.error", code: 0, userInfo: [NSLocalizedDescriptionKey: "Oops !"])
    }
}

func printUserList() async {
    async let userNames = getUserNames()
    async let userAges = getUserAges(status: false)
    do {
        let userListItem = try await UserList(names: userNames, ages: userAges)
        print("\(userListItem.names) - \(userListItem.ages)")
    } catch {
        print("error -> ", error.localizedDescription)
    }
}
Tarih:Swift 5

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Copyright © 2021 Kenan Atmaca