swift4でUITableViewControllerにUIRefreshControlを実装する

iOS10でスクロールビューでRefresh Controlが使えるようになったみたいで、実装中のUITableViewControllerに追加してみました。
xcode9、swift4を使って実装してます。

import UIKit

class PostViewController: UITableViewController {

    var posts: [Post] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.title = "最近の投稿"

        // 投稿情報の取得
        updatePostList(nil)

        // リフレッシュコントローラー
        refreshControl = UIRefreshControl()
        // リフレッシュしたときに実行する関数を追加
        refreshControl?.addTarget(self, action: #selector(PostViewController.refresh(_:)), for: .valueChanged)
    }

    @objc func refresh(_ sender: UIRefreshControl) {
        // レスポンスが割と速かったので、2秒後にAPIからデータを取得する
        DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
            // APIに接続してテーブルビューを更新
            self.updatePostList(sender)
        }
    }

    // APIからPOSTデータを取得
    func updatePostList(_ sender: UIRefreshControl?) -> Void {

        PostAPI.fetchAll(condition: condition, { errorOrPost in

            // メインスレッドで実行
            DispatchQueue.main.async {

                // テーブルビューを更新
                self.tableView.reloadData()

                // リフレッシュだとsenderがあるので、リフレッシュ完了
                if sender != nil {
                    sender?.endRefreshing()
                    print("refresh")
                }
            }
        })
    }
}




参考サイト:https://dev.classmethod.jp/smartphone/ios-10-support-refresh-control-in-all-scroll-views/