0

到目前为止,以下代码工作正常,

class Controller extends GetxController{
  var count = 0.obs;
  increment() => count++;
}

但是,当我分配一个值时,它不能按预期工作,而不是类型转换的事件。

class Controller extends GetxController{
  var count = 0.obs;
  reset() => count = 10;
}

我想知道如何在获取 x obs 对象中分配值(使用 '=' )?

4

2 回答 2

7

在我被告知我错了之后,这个答案已经改变了。我要感谢 Ivo Beckers 指出我对RxInt工作原理的误解。请点赞他的回答。

0.obs返回类型RxInt。当您调用++此对象时,它正在调用对象+上的运算符以增加值。应该注意的是,and运算符确实操纵了对象本身,因此不像 eg它是不可变的,因此需要从操作中返回一个新对象。RxInt1+-RxIntint

当你这样做时,count = 10你实际上是在说你想count被覆盖10类型int而不是类型RxInt

您想要的更可能是以下内容,您可以向任何订阅者报告该值已重置为10

class Controller extends GetxController{
  var count = 0.obs;
  reset() => count.value = 10;
}
于 2021-03-09T08:39:33.117 回答
2

要设置一个值,RxInt您只需将其分配给该值。所以你也是

reset() => count.value = 10;

++ 也起作用的原因是因为count++简单地转换为count = count + 1并调用RxInt实例上的运算符,这只是增加了它的值,正如您在以下实现中看到的那样RxInt

class RxInt extends Rx<int> {
  RxInt(int initial) : super(initial);

  /// Addition operator.
  RxInt operator +(int other) {
    value = value + other;
    return this;
  }

  /// Subtraction operator.
  RxInt operator -(int other) {
    value = value - other;
    return this;
  }
}
于 2022-01-14T09:25:08.953 回答