android Kotlin?中mutableStateOf()/可变状态的自定义设置器

omqzjyyz  于 2023-02-14  发布在  Android
关注(0)|答案(1)|浏览(290)

是否有办法覆盖MutableState的基础值的setter
基本上,我希望实现非MutableState的确切行为

object MyClass2 {
  val myProperty2: Int = 0
        set(value) {
            if (value>= 0) {
                field = value
            }
        }
}

使用myProperty2 = -3将执行我的自定义setter,并且不会更新值,因为不满足if条件。

object MyClass1 {
  val myProperty1: MutableState<Int> = mutableStateOf(0)
        set(value) {
            if (value.value >= 0) {
                field = value
            }
        }
}

使用myProperty1.value = -3将*不*执行我的自定义setter,因为我更改的是基础值,而不是MutableState本身
这与this question有关,但答案只查找状态更改。(自动更新值)。我希望仅在满足条件时更改状态。

6ioyuze2

6ioyuze21#

只要我们的代码是基于接口的,我们就可以使用组合和委托来解决这类问题,在这种情况下,我们可以创建自己的MutableState实现,然后根据需要实现所有的东西,可能会委托给原始的可变状态,只要它有意义:

val myProperty1 = run {
    val state = mutableStateOf(0)
    object : MutableState<Int> by state {
        override var value: Int
            get() = state.value
            set(value) {
                if (value > 0) {
                    state.value = value
                }
            }
    }
}

相关问题