When Swift 2 was announced, I filed a radar (rdar://problem/21305056) suggesting that Swift should drop the `throws` annotation in favor of a stdlib-provided Result<T,E> type, but otherwise keep all the sugar (e.g. try and do {} catch {}). This change would lose the ability to mark a function as `rethrows` but would gain more explicit error typing as well as a consistent story for error handling between synchronous and asynchronous methods. Although FWIW, explicit error typing could be added to the `throws` keyword and Result<T,E> could still be used for asynchronous error handling, it just wouldn't be consistent with synchronous error handling. And even though I filed that radar, I'm not actually 100% convinced it's the better approach anyway, I just wanted it to be considered. Although I do think Swift 2 should provide an official Result<T,E> type and use it for asynchronous errors since `throws` doesn't work there.
Anyway, the radar was closed with a comment "Thank you for the feedback. We discussed this extensively. If you’d like some rationale, please ask on the developer forums.". To that end, I would appreciate it if any Apple employee could chime in with an explanation of the rationale.