LoginSignup
4
0

More than 5 years have passed since last update.

メソッドがthrowしたいときにそのメソッドの同期実行クロージャの中のtryはどうすんの

Last updated at Posted at 2017-12-05

はじめに

「メソッドがエラーをthrowさせたいとき、そのメソッドの同期実行クロージャの中のtryはどうすんの、クロージャの外にthrowできないのにどうすんのさ」っていうのを度々忘れるんだけど、それの解決策としてはerrorの変数を用意し、同期実行のクロージャでcatchしたらその変数にセットしてそこでthrowするだけですね、という話。

func perform() throws {
    // クロージャの中のerrorを取り出す
    var _error: Error!

    // こいつが同期実行のクロージャ
    performAndWait {
        do {
            try self.save()
        } catch {
            _error = error
        }
    }

    if let error = _error {
        throw error
    }
}

ちなみに、どのような場合にこんな事をやることになったかというと、Core Dataで別スレッドでconetxtに一気に書き込んで、それを親のcontextへ再帰的に反映するときに利用した。

参考

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0