GCD で dispatch した非同期処理をキャンセルしたいケースというのがよくありまして 1、Objective-C の場合はいつも使ってるスニペットがあったのですが、Swiftではどう書くのかなとググったら、こちら のコードが見つかりました。 で、命名に違和感があったり、遅延実行キューがメインキュー限定だったり、Swift的でない書き方だったりしたのを修正したものが以下になります。 typealias dispatch_cancelable_block_t = (cancel:Bool) -> (Void) private func dispatch_after_delay(delay: Double, queue: dispatch_queue_t, block: dispatch_block_t?) -> dispatch_cancelable_block_t? { guard