代码之家  ›  专栏  ›  技术社区  ›  Mike.R

飞镖颤振中的“is”操作员预期行为

  •  0
  • Mike.R  · 技术社区  · 1 年前

    我有点奇怪的问题(我可能遗漏了什么)
    我决定在Flutter中迭代元素树,并有以下问题:

    if (element.widget.runtimeType == GestureDetector) {
            print('return true1');
    }
    if (element.widget.runtimeType is GestureDetector) {
            print('return true2');
    }
    

    我的小部件的运行类型似乎是 GestureDetector (这就是我在调试器中看到的)。
    当我与 == 我看到了 返回true 1 正如预期的那样。
    但为什么当我把它与 is 接线员我没看到 返回true 2 这有点奇怪,
    为什么 操作员没有 返回true 2 ?
    根据文件:
    The result of obj is T is true if obj implements the interface specified by T link

    2 回复  |  直到 1 年前
        1
  •  3
  •   Rahul    1 年前

    runtimeType是可用于dart中每个对象的属性。它的类型为“type”。

    所以当你这样做的时候

    if (element.widget.runtimeType == GestureDetector) {
            print('return true1');
    }
    

    它正在检查runtimeType是否为GestureDetector,其中的值为 runtimeType 是手势检测器,但类型是 Type .

    当你在做的时候,

    if (element.widget.runtimeType is GestureDetector) {
            print('return true2');
    }
    

    它正在检查runtimeType的类型是GestureDetector,这不是真的,因为它是type。

    要检查小部件是否为手势检测器,您应该执行以下操作

    if (element.widget is GestureDetector) {
            print('return true2');
    }
    
        2
  •  3
  •   Dhafin Rayhan    1 年前

    你应该测试对象本身,而不是它的 runtimeType 吸气剂。所以应该是这样的:

    if (element.widget is GestureDetector) {
            print('return true2');
    }
    

    请参阅Dart类型测试运算符的用法: https://dart.dev/language/operators#type-test-operators