Вы задали два вопроса
1) хотите, чтобы этот шаблон выполнялся как можно больше итераций и сохранял состояния всех из них.
Ответ. : вы не можете непрерывно представлять представление на уже представленном контроллере представления. для этого сначала нужно отклонить предыдущий представленный вид.
2) Чтобы закрыть текущий контроллер вида, я звоню
_ = navigationController?.popViewController(animated: true)
, но это также стирает все данные с предыдущего контроллера представления.
Ans. Если вы предоставляете какой-либо контроллер представления, то не используйте popviewcontroller, а используйте dismisViewController.