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