Краткий ответ: нет обратного вызова, который запускает базовое будущее, которое вы можете использовать для очистки подписчика cancel
. В дизайне Combine эти функции преднамеренно разделены и не имеют ссылочных ссылок на своих издателей.
(Кроме того, Future - сложная фигура в мире Combine, поскольку замыкание вызывается сразу после создания время, а не когда у вас есть подписка (если вы хотите, оберните в издателя Future в отложенного издателя)).
Все, что говорится, что вы, вероятно, хотите сделать, чтобы решить вашу основную проблему Переосмыслите, как вы относитесь к этому, чтобы разделить заботы об управлении экземпляром FMDB и публикации данных. Одним из примеров, который был достаточно полезен в этом контексте, является создание объекта, который содержит время жизни ссылки FMDB, и обрабатывает очистку ресурсов на этом deinit()
. Затем у вас также может быть функция, которая отправляет издателю все, что вам нужно, из этого же объекта, а затем семантически изменяется отмена запроса, чтобы только отменять получение базы данных, а не отменять и очищать соединение с базой данных.