有没有办法在kotlin中写入可挂起的委托属性?
我试图实现类似于使用kotlin提供的名为有没有办法在kotlin中写入可挂起的委托属性?,kotlin,delegates,coroutine,kotlin-coroutines,Kotlin,Delegates,Coroutine,Kotlin Coroutines,我试图实现类似于使用kotlin提供的名为delegate的特殊功能的东西 让我们以以下简单用例为例: 我有两个变量叫做var-voltage:Float和var-light:Boolean 当电压大于5.0时,我想打开灯 当电压小于5.0时,我想关灯 注:每个变量更改都需要发布更改的值(涉及网络调用) 下面的代码片段捕获了上述用例 suspend fun publishLightStatus(status: Boolean): Unit = TODO() suspend f
delegate
的特殊功能的东西
让我们以以下简单用例为例:
- 我有两个变量叫做
和var-voltage:Float
var-light:Boolean
- 当
大于5.0时,我想打开灯电压
- 当
小于5.0时,我想关灯电压
suspend fun publishLightStatus(status: Boolean): Unit = TODO()
suspend fun publishVoltage(voltage: Float): Unit = TODO()
fun subscribeToVoltage(block: (Float) -> Unit): Unit = TODO()
var light: Boolean by Delegates.observable(false) { _, _, n ->
publishLightStatus(n)
}
var voltage: Float by Delegates.observable(0F) { _, _, n ->
if(n > 5.0) light = true
else if (n < 5.0) light = false
publishVoltage(n)
}
// usage
subscribeToVoltage {
voltage = it
}
suspend fun publishLightStatus(状态:布尔值):单位=TODO()
暂停电压(电压:浮动):单位=TODO()
fun subscribeToVoltage(block:(Float)->Unit):Unit=TODO()
var灯光:代理的布尔值。可观察(假){{uu,{uu,n->
publishLightStatus(n)
}
无功电压:由代表浮动。可观察(0F){{},n->
如果(n>5.0)灯光=真
否则,如果(n<5.0)灯光=假
出版电压(n)
}
//用法
下标电压{
电压=it
}
上述代码未编译,因为当前属性委托
不支持挂起。
ReadWriteProperty
中的getValue
和setValue
函数不可挂起。
另外,不支持suspend operator getValue()
语法
我有什么办法可以解决这个问题吗?
我真的不想与网站代码的使用妥协。
另一件重要的事情,
voltage=it
这应该在publishVoltage(n)
调用完成时返回。一般来说,属性应该简单并且应该快速返回。他们不应该揭露任何值得停职的事情,但这只是一种意见
目前没有办法做到这一点,但YouTrack存在一个问题,并且与此相关
您还可以尝试使用runBlocking
或GlobalScope.launch
来满足您的需要