Swift 无法确定 switch 子句是不是详尽
Posted
技术标签:
【中文标题】Swift 无法确定 switch 子句是不是详尽【英文标题】:Swift cannot determine switch clauses being exhaustiveSwift 无法确定 switch 子句是否详尽 【发布时间】:2014-07-05 22:17:41 【问题描述】:这是一个人为的问题,因为我想更详细地了解 swift。 快速编译器抱怨以下内容并不详尽。当然,在一般情况下,它无法确定案例陈述是否详尽无遗。我应该怎么做最好 告诉编译器我的列表是详尽无遗的,例如以下情况?
let point = (2, 2)
switch point
case let (x, y) where x == y:
println("on the x=y line")
case let (x, y) where x != y:
println("somewhere else off x=y line")
是添加空默认值的唯一选项吗?
【问题讨论】:
【参考方案1】:是添加空默认值的唯一选项吗?
在这一点上,是的。这是我们目前必须解决的编译器错误。如果我是你,我肯定会file a Radar 详细说明你的发现。
【讨论】:
它可能最终不会成为永远修复的“编译器错误”。通过运算符重载,可以创建==
或!=
都不会为相同的两个操作数返回true
的类型。
我已按照建议提交了雷达;见 17568787。
Apple 已报告错误 17568787。它已关闭,因为要解决它需要约束求解器,但这会对编译时间产生不利影响。【参考方案2】:
我正在研究 Swift,我找到了以下解决方案来解决您的简短 sn-p:
let point = (2, 2)
switch point
case let (x, y) where x == y:
print("on the x=y line")
case let (x, y): // Otherwise where x != y:
print("somewhere else off x=y line")
我知道,这不是编译器进行的穷举检查的解决方案,但它是避免无用的default
子句的一种方法。
【讨论】:
以上是关于Swift 无法确定 switch 子句是不是详尽的主要内容,如果未能解决你的问题,请参考以下文章