[SWIFT] Extension qui exécute de manière asynchrone la fermeture transmise à l'initialiseur de Combine.Future

Qu'est-ce que c'est ça?

L'avenir n'est-il pas un modèle futur? Pourquoi la valeur est-elle déjà fixée au moment de la génération? N'est-ce pas juste?

J'ai essayé de le rendre asynchrone en utilisant DispatchQueue dans la fermeture, mais c'est gênant. Alors je l'ai fait.

import Combine

extension Future {
    
    convenience init<S: Scheduler>(on scheduler: S, _ attemptToFulfill: @escaping (@escaping Promise) -> Void) {
        
        self.init { promise in
            scheduler.schedule {
                attemptToFulfill(promise)
            }
        }
    }
}

Comment utiliser


let future = Future<Int, Error> { promise in
                 DispatchQueue.global().async {
                     sleep(1)
                     promise(.success(1))
                 }
}

C'est

let future = Future<Int, Error>(on: DispatchQueue.global()) { promise in
                 sleep(1)
                 promise(.success(1))
}

Ce sera comme ça.

Recommended Posts

Extension qui exécute de manière asynchrone la fermeture transmise à l'initialiseur de Combine.Future
[Swift] Présentation de la logique des applications qui ont réussi la sélection
Comment vérifier l'extension et la taille des fichiers téléchargés
Ceci et cela de JDK
Un mémo sobrement accro à la demande de multipart / form-data
A vous qui regrettez que la conversion de JODConverter + LibreOffice soit lente