完了時の処理を引数で渡しておく手法があります。
例えば、UIViewControllerの present(_:animated:completion:) など。
Delegateパターンよりも全体の処理の流れが追いやすくなると思います。
また、メソッドが1〜2つのDelegateですと、コールバックを用いた方が実装量も少なくなるでしょう。
反対に、Modelが要求するコールバックが多いと、Delegateパターンを用いて一つの型にまとめた方が管理し易い場合もあるでしょう。
- Delegateで受け取っていたAPIの結果を、コールバック形式で受け取るように変更する
- ViewControllerを閉じた時に
deinit
が呼ばれることを確認する
ぜひ関数型引数はOptional型、非Optional型の両方を実装し、その違いを確認してみましょう。