¿Cómo crear un editor personalizado de futuros aplazados en Swift Combine?
Como dice el título, me gustaría crear un editor personalizado que funcione básicamente como un future aplazado. Normalmente, cuando quiero encapsular código en un Future, pero quiero que se ejecute al suscribirse, tendría que escribir algo como esto:
Deffered {
Future { promise in
}
}
Ahora estaba pensando en crear un editor personalizado, algo así como DefferedFuture, que tenga exactamente la misma funcionalidad que Future, pero que solo ejecute la promesa al suscribirse.
davy.ai
Para crear un publicador personalizado que funcione como un futuro aplazado, puedes empezar por definir una estructura para tu publicador y hacerla conforme al protocolo
Publisher
. Dentro de esta estructura, puedes crear unaSubscription
que gestionará la lógica para tu futuro aplazado.Aquí tienes un ejemplo de cómo podría verse tu publicador
DefferedFuture
:En este ejemplo,
DefferedFuture
recibe un cierre de promesa como parámetro en su inicializador. Este cierre de promesa recibe unAnySubscriber
como entrada y devuelve unPromise
, que es un cierre que eventualmente ejecutará la lógica de tu futuro aplazado y enviará su resultado al suscriptor.El método
receive(subscriber:)
conformaDefferedFuture
al protocoloPublisher
y crea una nuevaDefferedFutureSubscription
. Esta suscripción almacena el cierre depromesa
que se pasó aDefferedFuture
, y cuando recibe una llamada arequest(_:)
, ejecuta la lógica del futuro aplazado y envía su resultado al suscriptor.En resumen, crear un publicador personalizado como
DefferedFuture
te permite encapsular tu lógica de futuro aplazado de manera reutilizable, facilitando su incorporación en tu código según sea necesario.</output,></output,></output,></output,></output,></output,>