【问题标题】:In Flutter/Dart, what is the difference between using "==" vs "is" in a conditional if statement [duplicate]在 Flutter/Dart 中,在条件 if 语句中使用“==”与“is”有什么区别[重复]
【发布时间】:2020-12-01 21:21:11
【问题描述】:

我正在做一个关于 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 函数。这是为什么呢?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    '==' is an equality operator.

    要测试两个对象 x 和 y 是否代表相同的事物,请使用 == 运算符。 (在极少数情况下,您需要知道两个对象是否是完全相同的对象,请改用 same() 函数。)以下是 == 运算符的工作原理:

    如果 x 或 y 为 null,如果两者都为 null,则返回 true,如果只有一个为 null,则返回 false。

    返回方法调用 x.==(y) 的结果。 (没错,==之类的操作符就是在第一个操作数上调用的方法,详见操作符。)

    'is' is a type test operator

    如果obj实现了T指定的接口,obj is T的结果为真。例如,obj is Object永远为真。

    在您的代码中:

    is 检查状态是否为 WeatherLoaded 类的实例。

    最重要的是,如果检查成功,您不需要强制转换为 WeatherLoaded - 在 if 语句的范围内,状态变量被向下转换为 WeatherLoaded(“智能转换状态”) .

    使用== 运算符,您可以比较一个类的两个实例。

    【讨论】:

    • 感谢您的出色回答。最后一个问题 - 如果我使用 (state == WeatherLoaded) 而不是 "is",我将如何在 if 语句的范围内使用 state?
    • 你不会的。如果 state 包含 WeatherLoaded 类的实例,state == WeatherLoaded 将评估为 false。如果 x 的类型为 Type 并指向 WeatherLoaded,x == WeatherLoaded 为真:var weatherLoadedType = WeatherLoaded(注意不要通过括号进行实例化)
    猜你喜欢
    • 2019-05-06
    • 2020-08-16
    • 2020-04-04
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多