Sobes.tech
Junior — Middle

Lehetséges saját wrapper-t implementálni olyan módszerekhez, amelyek végrehajtási kezelőt (completion handler) használnak, az async/await szintaxis alkalmazásával?

sobes.tech MI

Válasz az MI-től

Igen, saját burkolót hozhat létre a befejezési kezelővel rendelkező módszerekhez, az async/await használatával, alkalmazva a withCheckedContinuation vagy withUnsafeContinuation konstrukciót. Ez lehetővé teszi egy callback-alapú API átalakítását aszinkronná, ami kényelmes az async/await használatához.

Swift példában:

func fetchDataAsync() async throws -> Data {
    return try await withCheckedThrowingContinuation { continuation in
        fetchData { result in
            switch result {
            case .success(let data):
                continuation.resume(returning: data)
            case .failure(let error):
                continuation.resume(throwing: error)
            }
        }
    }
}

Itt a fetchData egy befejezési kezelővel rendelkező módszer, az fetchDataAsync pedig a wrapperje async/await-tel.