@unknown default
是最后一个case。请查看苹果公司的@unknown文档,他们解释了为什么必须在switch语句中的最后一个case中使用它,并且在以下引用中的“未知模式”链接中有更多信息:
@unknown只能应用于default或由单个模式_组成的case。即使在后一种情况下,@unknown也必须与switch中的最后一个case一起使用。该限制在“未来方向”下的{{link3:“未知模式”}}部分中进一步讨论。
return
结尾处加上 ;
吗,像这样:return;
? - denis_lorreturn
之后加上分号,以防编译器认为您正在尝试返回下一行。 - matt有很多情况下,一个裸的return
后面跟着另一行代码会导致Swift认为你试图返回那一行代码。这种情况比以前少见了,因为现在至少有一个警告来提醒你(而且这种情况出现的范围比以前小得多):
@IBAction func doDismiss(_ sender: Any) {
return
self.presentingViewController?.dismiss(animated:true)
}
那段代码看起来合法,但是它无法编译,结果是一个看似奇怪的编译错误:
Value of optional type 'Void?' must be unwrapped to a value of type ‘Void'
幸运的是,这种奇怪现象的原因通常会通过警告来显示:
Expression following 'return' is treated as an argument of the 'return'
解决方案一直是在return
后面添加分号。实际上,对于我们这些从Swift 1开始使用Swift的人来说,在裸露的return
后面添加分号几乎是一种条件反射,尽管这些天通常不再需要。
你的情况基本上是同样的问题。问题在于您没有得到解释性警告。
return
后面跟着一个表达式,这是有效的。OP的情况是一个return
后面跟着一个语句,Swift应该能够将其视为一个裸的return
后面跟着一个语句(而不是尝试将该语句解析为表达式)。这是一个错误(SR-9920),已经被修复了 :) - Hamish