try/catch と do 記法ってほとんど同じで( do 記法がエラー以外にも使える汎用的なものであることは別として)、現代の大抵の言語はそういうエラー処理機構を持ってるから、それなしでエラーと戦おうとすると辛いと思う。 (edited)try/catch 系を採用してる言語では、 Java が検査例外を導入したけど後続言語がみんな非検査例外に逃げちゃったから、 Java と Swift しかコンパイル時にチェックできる言語がない・・・。try! 相当のものと、 null safety 、 NumberFormatException が非検査例外なこと、 Effective Java で推奨されてる例外の使い分けに従ってない API あたりが複合して使いづらくなってるけど、本質的には Java の検査例外でも Swift の throws/try と同じような使い勝手を実現できると思う。