首页 > 解决方案 > 简化 switch 语句

问题描述

我想总结一下下面的代码,让它越来越漂亮。

我有 5 个模型(UserGroupEventMemberAppearance),三个如下所示。

我想简化代码。

  String getId(uri) {
    String pathSegment;
    if (uri.pathSegments.length >= 2) {
      pathSegment = uri.pathSegments[1];
    } else {
      return null;
    }
    switch (resource) {
      case 'users':
        for (User user in models[resource]) {
          if (user.id == pathSegment) {
            return pathSegment;
          } else {
            return null;
          }
        }
        break;
      case 'groups':
        for (Group group in models[resource]) {
          if (group.id == pathSegment) {
            return pathSegment;
          } else {
            return null;
          }
        }
        break;
      case 'events':
        for (Event event in models[resource]) {
          if (event.id == pathSegment) {
            return pathSegment;
          } else {
            return null;
          }
        }
        break;
      default:
        break;
    }
    return null;
  }

标签: dart

解决方案


如果你的User,GroupEvent有一个共同的, 那么你可以通过使用typeid来简化你的代码。dynamic请参阅相关文档

String getId(uri) {
  String pathSegment;
  if (uri.pathSegments.length >= 2) {
     pathSegment = uri.pathSegments[1];
  } else {
    return null;
  }

  return _getIdFromItems(models[resource], pathSegment);
}

String _getIdFromItems(List<dynamic> items, String pathSegment) {
   for (dynamic item in items) {
     if (item.id == pathSegment) {
       return pathSegment;
     } else {
       return null;
     }
   }
   return null;
}

推荐阅读