String? x = possiblyReturnsNull();
if (x != null) {
// All code within this block treats `x` as non-nullable.
}
// All code outside the block continues to treat `x` as nullable.
String? x = possiblyReturnsNull();
if (x == null) return whatever; // This works like Swift's guard
// All code outside the block now treats `x` as NON-nullable.
5条答案
按热度按时间2sbarzqh1#
我不是Swift的Maven,但Dart会使用null检查来自动提升类型,我认为这主要是做
if let
和guard let
的工作。例如:
注意that promotion won't be performed on non-local variables,所以对于那些你需要显式引入一个本地引用的对象(There is a language proposal提供了一个机制,允许一个更好的机制来添加一个本地引用,而不会污染外部作用域)。
pprl5pva2#
我也要加入进来,因为我也来自Swift,并且喜欢使用很多守卫。加上@jamesdlin所说的,相反的情况也是如此。
所以你可以使用Swift的guard语句:
d4so4syb3#
对公认答案的一个小扩展是Flutter还允许强制解包Optional。因此,如果您访问的是非nil值,而不是保存在变量中,如字典中,则需要在if语句中解包它:
vxbzzdmp4#
Flutter 3.x
一种快速的处理方法是在
String?
上扩展一个检查null
和空由于
null
检查是第一个发生的,所以强制打开第二个this
是安全的使用方法:
如果您只是想用值或空
String
来展开可选的,那么您可以这样做这将返回未 Package 的值或空的
String
两者都可以设置为泛型,不过需要为后者传递一个默认值,以确保在所有情况下都能正常工作
ffx8fchx5#
检查Dart中的null安全性: