flutter - 在 Flutter/Dart 中,在条件 if 语句中使用“==”与“is”有什么区别
问题描述
我正在做一个关于 Flutter 中 BLoC 的教程,导师在他的条件 if 语句中使用关键字“is”,他说“智能广播”状态。谁能帮我理解“is”运算符如何让我在下面的代码中访问集团的状态?
BlocBuilder<WeatherBloc, WeatherState>(
builder: (context, state) {
if (state is WeatherLoaded) {
return buildColumnWithData(context,state.weather);
}
当我使用 if (state == WeatherLoaded) 尝试相同的代码时,我无法将 state.weather 传递给 buildColumnWithData 函数。为什么是这样?
解决方案
要测试两个对象 x 和 y 是否代表相同的事物,请使用 == 运算符。(在极少数情况下,您需要知道两个对象是否是完全相同的对象,请改用 same() 函数。)以下是 == 运算符的工作原理:
如果 x 或 y 为 null,如果两者都为 null,则返回 true,如果只有一个为 null,则返回 false。
返回方法调用 x.==(y) 的结果。(没错,== 等运算符是在其第一个操作数上调用的方法,详情请参阅运算符。)
如果 obj 实现了 T 指定的接口,则结果
obj is T
为 true。例如,obj is Object 始终为 true。
在您的代码中:
is
检查状态是否是类的实例WeatherLoaded
。
最重要的是,如果检查成功,您不需要进行WeatherLoaded
强制转换 - 在 if 语句的范围内,状态变量被向下转换为WeatherLoaded
(“is smartcasts the state”)。
使用==
运算符,您可以比较一个类的 2 个实例。
推荐阅读
- python - 如何索引到字典列表?
- javascript - 使用 javascript 或 Jquery 更改 html 值
- xcode - 如何为 SpriteKit 创建随机赛道?
- xamarin - 回历日历不存在
- c# - RichTextFormat 作为变量类型
- javascript - 如何使用 Xmlhttprequest 参数请求特定元素
- sql - PLSQL 中的正则表达式
- r - geom_smooth lm 线未绘制 - ggplot2
- clojure - clojure access enum defined inside a java class
- java - LinkedList 初始化时的默认值