dart 开关盒
示例
Dart有一个可用于代替长if-else语句的开关盒:
var command = 'OPEN';
switch (command) {
case 'CLOSED':
executeClosed();
break;
case 'OPEN':
executeOpen();
break;
case 'APPROVED':
executeApproved();
break;
case 'UNSURE':
//缺少break语句意味着此案将失败
//到下一条语句,在这种情况下为默认情况
default:
executeUnknown();
}您只能比较整数,字符串或编译时常量。被比较的对象必须是同一类的实例(而不是其任何子类型的实例),并且该类不得覆盖==。
Dart中switch的一个令人惊讶的方面是非空case子句必须以break结尾,或者更不常见的是continue,throw或return。也就是说,非空大小写子句不能通过。您必须显式地结束非空case子句,通常以break结束。如果省略中断,继续,抛出或返回,则将收到静态警告,并且代码将在运行时在该位置错误。
var command = 'OPEN';
switch (command) {
case 'OPEN':
executeOpen();
//错误:缺少中断会引发异常!
case 'CLOSED': //空箱子掉了
case 'LOCKED':
executeClosed();
break;
}如果您希望使用非空值case,可以使用continue和标签:
var command = 'OPEN';
switch (command) {
case 'OPEN':
executeOpen();
continue locked;
locked: case 'LOCKED':
executeClosed();
break;
}