いやー、7年iOSやってても全然しらなかったんですが、Segueを自作するとちょっと便利ですね。

モーダルで開いたViewControllerを閉じるときにボタンを置いてコードを書くのは面倒だなーと思ってたんですが、閉じるボタンの操作をSegueで定義できます。

準備としてUIStoryboardSegueを継承したサブクラスをプロジェクト内に作っておきます。

class DismissControllerSegue: UIStoryboardSegue {
    override func perform() {
        self.source.dismiss(animated: true, completion: nil)
    }
}

コードはシンプルでperform()の中にやりたいことを書く形。今回は自分自身をdismissするだけです。

ここまででstoryboardが参照してくれるようになっていますので、あとはボタンと紐付けるだけです。controlキーを押したままボタンからViewController自身にドラッグすると↓のようなpopoverみたいなのが出ます。

ここで、先程追加したSegueを表すdismiss controllerを選べばOK。ボタンタップ時に自身が閉じてくれます。