Swift's try 的相似语法是什么?在颤振上?
What is the similar syntax of Swift's try? on Flutter?
在 Swift 上,我们有 try?
时错误处理几乎不重要,我们只想让整个考验安静下来,只是“如果失败就给我 null”。
Flutter有这种东西吗?我试图找到它,但我只能在 the documentation 上找到通常的 try ... catch
子句。我的意思是,我当然可以这样做:
dynamic result = null;
try { result = json.decode(response.body); } catch (e) { }
但我正试图找到更像这样的东西(如果它存在的话):
var result = try? json.decode(response.body);
这将有一个附加值,即不必事先手动键入变量类型,让 lint/editor/compiler 只需使用 var
即可(尽管在这种特定情况下,类型结果可能是dynamic
).
没有 Dart 语言功能可以做到这一点。我不熟悉 try?
在 Swift 中是如何工作的,但是 Dart 中这种构造的一个潜在问题是,如果不指定你捕获的内容,你可以捕获 logical 错误(例如失败的断言)。
如果您不介意额外级别的函数调用,您可以编写一个函数使其(可以说)更方便一些(这也可以让您控制要捕获的内容):
T? doOrDoNot<T>(T Function() closure) {
try {
return closure();
} on Exception {
return null;
}
}
var result = doOrDoNot(() => json.decode(response.body));
在 Swift 上,我们有 try?
时错误处理几乎不重要,我们只想让整个考验安静下来,只是“如果失败就给我 null”。
Flutter有这种东西吗?我试图找到它,但我只能在 the documentation 上找到通常的 try ... catch
子句。我的意思是,我当然可以这样做:
dynamic result = null;
try { result = json.decode(response.body); } catch (e) { }
但我正试图找到更像这样的东西(如果它存在的话):
var result = try? json.decode(response.body);
这将有一个附加值,即不必事先手动键入变量类型,让 lint/editor/compiler 只需使用 var
即可(尽管在这种特定情况下,类型结果可能是dynamic
).
没有 Dart 语言功能可以做到这一点。我不熟悉 try?
在 Swift 中是如何工作的,但是 Dart 中这种构造的一个潜在问题是,如果不指定你捕获的内容,你可以捕获 logical 错误(例如失败的断言)。
如果您不介意额外级别的函数调用,您可以编写一个函数使其(可以说)更方便一些(这也可以让您控制要捕获的内容):
T? doOrDoNot<T>(T Function() closure) {
try {
return closure();
} on Exception {
return null;
}
}
var result = doOrDoNot(() => json.decode(response.body));