苹果文档说
每个switch语句必须详尽无遗。也就是说,所考虑类型的每个可能值都必须与切换条件之一匹配。
所以在新的Xcode中,我放置了这样的代码
println(UInt16.min); // Output : '0'
println(UInt16.max); // Output : '65535'
var quantity : UInt16 = 10;
switch quantity {
case 0...65535: //OR case UInt16.min...UInt16.max:
println();
default:
println();
}
现在,如果我删除默认部分,则会出现编译器错误:
切换必须详尽无遗
是否要添加丢失的案例?固定
所以我的问题是我提到的一个案例,因为case 0...65535:
我没有提到UInt16
??的所有案例值。但是我仍然遇到错误?为什么会出现此错误,我错过了什么吗?
Swift仅switch
在处理enum
类型时才真正验证一个块是否完整。即使打开,除了和之外都Bool
需要一个default
块:true``false
var b = true
switch b {
case true: println("true")
case false: println("false")
}
// error: switch must be exhaustive, consider adding a default clause
有enum
,但是,编译器很乐意只能看两种情况:
enum MyBool {
case True
case False
}
var b = MyBool.True
switch b {
case .True: println("true")
case .False: println("false")
}
如果default
出于编译器的需要而需要包含一个块,但没有任何要做,则可以使用该break
关键字:
var b = true
switch b {
case true: println("true")
case false: println("false")
default: break
}
在Swift中,init(rawValue:)系统可确保将Int转换为enum会导致有效的enum case或nil。 Objective-C中没有这样的安全性,其中可以通过强制转换非成员“rawValue”来创建无效枚举成员。 打开枚举时,如果未处理枚举案例,编译器会警告您: 枚举值“third”未在开关中处理 但是,一旦处理完所有案例,就不会有类似的警告,表明对于枚举的无效成员仍然可能出现“默
本文向大家介绍dart 开关盒,包括了dart 开关盒的使用技巧和注意事项,需要的朋友参考一下 示例 Dart有一个可用于代替长if-else语句的开关盒: 您只能比较整数,字符串或编译时常量。被比较的对象必须是同一类的实例(而不是其任何子类型的实例),并且该类不得覆盖==。 Dart中switch的一个令人惊讶的方面是非空case子句必须以break结尾,或者更不常见的是continue,thr
我使用返回元组的函数。但是当我试图运行这个函数时,它给了我一个例外:函数中的非穷尽模式。
我必须使函数:: [((String, String), Int)]- 这就是我提出的功能: 输出应该是一个元组列表,其中的字符串与元组x1中的inputWord以及整数x2成对出现 问题是我得到了我认为不应该存在的非详尽模式。 我试图替换与 这使得非穷举模式在列表不为空时消失,但也阻止了函数遍历元组的最后一个元组。
是否有注释或其他方法可以将非穷举的 switch 语句警告转换为错误?我希望某个方法或类在开关中未正确处理所有值,则会产生错误。 示例: 在代码中的其他地方,该枚举上有一个开关,如下所示 Java会给您一个警告,该开关不会处理所有枚举值。我想把这个警告变成一个错误(永久性的,不管个别IDE设置如何)。 请记住,在这种情况下,我无法更改原始,因此我希望编译器强制执行它。
我试图编写函数尾部,它将字符串转换成字符串列表,方式如下: 以下是我的实现: 正如标题所暗示的,这个函数中有一些非详尽的模式。不幸的是,我不明白为什么。 我是哈斯克尔的新手。。。任何帮助都将不胜感激!