在 Swift 或 Kotlin 中我可以做这样的事情
var fullName = myMap["fullName"] as? String
Run Code Online (Sandbox Code Playgroud)
那么fullName
数据类型将是可选的字符串(字符串?)。
我需要在类型检查后获得可选类型
我无法直接对该映射执行空合并运算符,因为 dart 会给出奇怪的结果。例如像这样
// 'data' is Map<String, dynamic>
final fullName = data["fullname"] ?? "John Doe";
final double myNumber = fullName;
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,IDE根本不会显示错误,我希望这fullName
将是一个字符串,所以当我将一个字符串分配给需要双精度的字符串时,它会出现错误myNumber
。
如果您事先知道这data["fullname"]
是 a String
,那么您可以这样做:
final fullName = (data["fullname"] ?? "John Doe") as String;
Run Code Online (Sandbox Code Playgroud)
如果在运行时data["fullname"]
结果不是a String
,您将因转换失败而收到运行时异常。如果这是您需要处理的事情,那么您可以轻松地创建一个简单的辅助函数,dynamic
首先检查一个值是否是所需的类型,null
如果不是则返回:
T? tryCast<T>(dynamic object) => object is T ? object : null;
final fullName = tryCast<String>(data["fullname"]) ?? "John Doe";
Run Code Online (Sandbox Code Playgroud)
现在fullName
静态地知道是 a String
,并且意外地将其分配给 adouble
将是一个编译时错误。
归档时间: |
|
查看次数: |
3225 次 |
最近记录: |