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; }