以前記事にしたautoreleasepoolから例外を投げられるようにするを更に使いやすい形にして、
sgr-ksmt/EnhancedAutoreleasePool
として公開しました!

前回紹介したtryが可能になるものに加えて、autoreleasepool()内で値を返すことができようにし、更にtry可能なautoreleasepool()も準備しました。
定義としてはこんな感じです。

public func autoreleasepool(@noescape code: () throws -> ()) rethrows
public func autoreleasepool<V>(@noescape code: () throws -> V?) rethrows -> V?
public func autoreleasepool<V>(@noescape code: () throws -> V) rethrows -> V

これで、以下の様な書き方もできます。

let value = autoreleasepool {
     doHighPressureMemoryTask()
     return "value"
}

autoreleasepool()の機能により局所的にメモリの圧迫を抑えつつ、必要な値を返戻することができます。

次回あたりに、あまり詳しく解説されているところがないので、throwsとrethrowsの違いでもまとめてみることにします。