将动态解析为int或回退为默认值

时间:2019-03-08 08:40:11

标签: dart flutter dynamic-typing

我有一个带有动态值的映射,其中一个可以是intstringnull(即不存在的密钥)。

我想将此值存储在int变量中。我想出的解析结果非常麻烦:

Map<String, dynamic> map = {'maxposts': null}; // or 23 or '42'

// Try to parse an int value or fall back to 0
int maxposts = (map['maxposts'] is int) 
    ? map['maxposts'] 
    : int.tryParse(map['maxposts'] ?? '0') ?? 0;

是否有更好的方法来进行这种“ try-fallback”解析?

1 个答案:

答案 0 :(得分:0)

您可以将操作抽象为类似函数

int intOrStringValue(dynamic o) {
  if (o is String) o = int.tryParse(o);
  return o ?? 0;
}

int intOrStringValue(dynamic o) =>
    (o is String ? int.tryParse(o) : o) ?? 0;

当您在整个逻辑中不重复使用map['maxposts']表达式时,它将变得更具可读性。