Swift中的try关键字的目的是什么?

问题描述

在缓解指尖瘙痒之前,我已经了解:

  • 如何以及何时使用try关键字
  • trytry?try!关键字之间的区别

我想了解的是,无修饰的try关键字的使用使我(以及您和我们所有人)获得的好处仅仅是使编译器诊断安静下来。我们已经在do的范围之内,并且显然编译器知道需要try,而且我(至今)看不到{{1 }}需要降落。那么,为什么在没有显式显示关键字的情况下,编译器不能安静地执行正确的操作呢?

关于该语言试图增强人类可读性的可能性,下面有很多讨论。我想我们需要一位Swift语言设计者的意见来确定这是否成立。即使我们认为这是否明智和/或是否成功还是有争议的。因此,暂时将其搁置一旁。未经修饰的try关键字的存在是否可以解决 增强人类可读性的某些问题?

解决方法

经过长时间的富有成果的讨论(链接在此页其他地方)…

简而言之,答案是否定的,除了增强可读性外没有其他目的,但是事实证明,赢得可读性比我想象的要重要。

应将try关键字视为与ifgoto的组合类似(但不等同)。尽管try并未指示编译器执行它无法推断的任何操作,但没有人会争辩说ifgoto应该是不可见的。这使try对于来自其他语言的人们有些奇怪-但这并非没有道理。

Objective C程序员可能很难理解这一点,因为他们习惯于假设他们所做的几乎任何事情都可能引发异常。当然,Objective C异常与Swift错误有很大的不同,但是有意识地知道它与新陈代谢和无意识地知道是不同的。

同样,如果您的直觉立即告诉您,在大多数情况下,作为样式问题,do子句中可能只有一个失败的操作,那么可能很难看清{{1 }}添加。