【问题标题】:Null safety and Maps空安全和地图
【发布时间】:2021-06-10 16:37:03
【问题描述】:
以下情况如何处理:
void main() {
print(getInt('d'));
}
Map<String, int> myMap = {'a':1, 'b':2, 'c':3};
int getInt(String key) {
if (!myMap.containsKey(key)) {
myMap[key] = 0;
}
return myMap[key]!;
}
myMap[key] 永远不会为空,但如果我删除 return myMap[key]!; 的 !,我会收到空安全错误:
'int?' 类型的值无法从函数“getInt”返回,因为它的返回类型为“int”。
用! 抛弃可空性是否合适,还是有更清洁的方法?
【问题讨论】:
标签:
flutter
dart
dart-null-safety
【解决方案1】:
不确定清洁器是什么意思,! 确实存在是有原因的。
您可以将 if 语句简化为一行:
int getInt(String key) {
myMap[key] ??= 0;
return myMap[key]!;
}
【解决方案2】:
来自docs:
如果键不存在,Map 类的 index [] 运算符返回 null。这意味着该运算符的返回类型必须可以为空。
Map<String, int> map = {'a': 1};
int i = map['a']; // Error
解决方案:
-
使用 ?? 并提供默认值。
int i = map['a'] ?? 0;
-
使用 Bang ! 运算符。
int i = map['a']!;
【解决方案3】:
当您使用地图时,您无法摆脱爆炸。
这可能是编写相同代码的更简洁的方式。
int getInt(String key) => myMap[key] ?? 0;