【发布时间】:2016-04-10 07:11:43
【问题描述】:
我在 swift 中遇到了这种愚蠢的行为,强制展开可选选项不会传播。
来自文档:
尝试使用!访问不存在的可选值会触发运行时错误。在使用之前,请务必确保可选项包含非零值!强制解包它的值。
复制:
func foo(bar:String?) throws{
print(bar!);
}
和
try foo(nil);
这对我来说似乎不合逻辑或不一致,我找不到有关此主题的任何文档。
这是设计的吗?
【问题讨论】:
-
我不确定使用
throw引发错误(这会导致错误从此类函数中传播)与强制解开@987654324 时发生的事情相同@。我想我在某处读到它被实现为assert()。 -
这可以解释,但那太可怕了。也许有一个论据,但在支持异常的语言中,它似乎不一致。
-
@Greg:尼古拉斯是对的。请注意,try/catch 处理 Swift errors(抛出符合
ErrorType的值)。这与运行时错误或异常完全无关。 (文档甚至没有提到与 throw/try/catch 相关的“异常”一词,只提到“错误处理”。) -
我猜很容易将 swift 错误与异常混淆。大多数其他编程语言使用类似的关键字(
try/catch)来处理异常处理。