在dart中使用枚举时是否可以返回默认值
现在我在dart中定义一个枚举,如下所示:在dart中使用枚举时是否可以返回默认值,dart,Dart,现在我在dart中定义一个枚举,如下所示: enum LoginType { PHONE, WECHAT } extension ResponseStatusExtension on LoginType{ static const statusCodes = { LoginType.PHONE: 1, LoginType.WECHAT: 2, }; int get statusCode => statusCodes[this]; } int
enum LoginType {
PHONE,
WECHAT
}
extension ResponseStatusExtension on LoginType{
static const statusCodes = {
LoginType.PHONE: 1,
LoginType.WECHAT: 2,
};
int get statusCode => statusCodes[this];
}
int get statusCode => statusCodes[this]!;
我正在升级到Flatter 2.0.1并支持空安全,现在它告诉我:
A value of type 'int?' can't be returned from the function 'statusCode' because it has a return type of 'int'.
但是我想让它返回一个默认的NOTNULL值以使代码rubust,并且在使用这个枚举时不必处理null。我应该怎么做才能使它返回默认值?有可能吗?错误的原因是
映射上的[]
运算符可以为空,因为它具有以下行为:
给定的键的值
,或者空值
(如果键不在映射中)
如果您确定您的映射
始终包含请求的键
,则可以添加代码>使用[]
运算符后,如下所示:
enum LoginType {
PHONE,
WECHAT
}
extension ResponseStatusExtension on LoginType{
static const statusCodes = {
LoginType.PHONE: 1,
LoginType.WECHAT: 2,
};
int get statusCode => statusCodes[this];
}
int get statusCode => statusCodes[this]!;
这将在运行时进行空检查,如果返回null
值,则检查将失败。但是,如果您确定映射
从未返回null
,则这应该不是问题
奖金小费
如果希望能够在映射
不包含给定的键的情况下从映射
返回默认值,则可以将以下扩展名添加到映射
:
extension MapDefaultValue<K, V> on Map<K, V> {
V get(K k, V defaultValue) => containsKey(k) ? this[k] as V : defaultValue;
}
地图上的扩展名MapDefaultValue{
V get(K,V defaultValue)=>containsKey(K)?此[K]作为V:defaultValue;
}
请注意,defaultValue
必须是Map
中key
的兼容类型,因此如果Map
中不允许null
作为defaultValue
值,则不能使用null
作为Map
中的值映射上的
运算符可为空,因为它具有以下行为:
给定的键的值
,或者空值
(如果键不在映射中)
如果您确定您的映射
始终包含请求的键
,则可以添加代码>使用[]
运算符后,如下所示:
enum LoginType {
PHONE,
WECHAT
}
extension ResponseStatusExtension on LoginType{
static const statusCodes = {
LoginType.PHONE: 1,
LoginType.WECHAT: 2,
};
int get statusCode => statusCodes[this];
}
int get statusCode => statusCodes[this]!;
这将在运行时进行空检查,如果返回null
值,则检查将失败。但是,如果您确定映射
从未返回null
,则这应该不是问题
奖金小费
如果希望能够在映射
不包含给定的键的情况下从映射
返回默认值,则可以将以下扩展名添加到映射
:
extension MapDefaultValue<K, V> on Map<K, V> {
V get(K k, V defaultValue) => containsKey(k) ? this[k] as V : defaultValue;
}
地图上的扩展名MapDefaultValue{
V get(K,V defaultValue)=>containsKey(K)?此[K]作为V:defaultValue;
}
请注意,defaultValue
必须是Map
中key
的兼容类型,因此如果Map
中不允许null
作为defaultValue
使用null