dart - 在飞镖中使用枚举时是否可以返回默认值
问题描述
现在我在飞镖中定义一个枚举,如下所示:
enum LoginType {
PHONE,
WECHAT
}
extension ResponseStatusExtension on LoginType{
static const statusCodes = {
LoginType.PHONE: 1,
LoginType.WECHAT: 2,
};
int get statusCode => statusCodes[this];
}
我正在升级到颤振 2.0.1 并支持空安全,现在它告诉我:
A value of type 'int?' can't be returned from the function 'statusCode' because it has a return type of 'int'.
但我想让它返回一个默认的非空值以使代码变得可靠,并且在使用此枚举时不必处理空值。我应该怎么做才能让它返回一个默认值?可能吗?
解决方案
您的错误的原因是[]
运算符 onMap
可以为空,因为它具有以下行为:
给定的值
key
,或者null
如果键不在地图中。
https://api.dart.dev/stable/2.12.2/dart-core/Map/operator_get.html
如果您确定Map
始终包含请求,则可以在使用运算符后key
添加一个,如下所示:!
[]
int get statusCode => statusCodes[this]!;
这将在运行时进行空检查,如果null
返回值则失败。但是,如果您确定null
永远不会从Map
.
奖金提示
如果您希望能够在 a不包含给定Map
的情况下从 a 返回默认值,您可以将以下扩展名添加到:Map
key
Map
extension MapDefaultValue<K, V> on Map<K, V> {
V get(K k, V defaultValue) => containsKey(k) ? this[k] as V : defaultValue;
}
请注意,它defaultValue
必须是key
in 的兼容类型,Map
因此您不能使用null
as defaultValue
if null
are not allowed as value
in Map
。
推荐阅读
- c - 谁能帮我?我的代码没有输入
- reactjs - 使用 HMAC 和 Cloudflare 对公共 API 进行身份验证?
- javascript - 实施 Mersenne Twister 时是否应将此数字减 1?
- amazon-ec2 - 使用 Ansible 拒绝 ec2 的 SSH 权限
- cassandra - Apache Cassandra“在输入‘或’时没有可行的替代方案”
- amazon-web-services - Amazon Connect(联系流)- 通过语音识别客户输入
- matlab - 如何在 MATLAB 中绘制日期时间的差异?
- android - BottomNavigationView 没有膨胀
- javascript - 单击 Expo Push Noti 时导航到嵌套导航器
- android - 当意图从相册中获取照片时,BitmapFactory.decodeFile 返回 null