Home > Blockchain >  kotlin - unknown syntax in Jetpack Owl Example
kotlin - unknown syntax in Jetpack Owl Example

Time:04-24

trying to find some direction on how to select multiple items in a lazy column, I have found the following code in Owl Jetpack Compose example (Onboarding.kt).

...    
val (selected, onSelected) = remember { mutableStateOf(false) }
...

Even if I'm able to use the code by myself, I really not able to decode the syntax of this val declaration. I wasn't able to find anything in kotlinlang.org site (the nearest topic I've found is about Destructuring declarations). Could someone help me to understand it and/or point me to relevant documentation?

CodePudding user response:

This syntax is Destructuring as you mentioned in question which is expclicitly as

val (selected: Boolean, onSelected: (Boolean) -> Unit) = remember { mutableStateOf(false) }

Which requires 2 components of targetted class. (val num1:Int, val num2:Int) = Pair(1,2) is an example

With MutableState

@Stable
interface MutableState<T> : State<T> {
    override var value: T
    operator fun component1(): T
    operator fun component2(): (T) -> Unit
}

You need to add T type and a lambda that takes T as param and returns unit.

And inside SnapshotImpl source code of MutableState it's used as

override operator fun component2(): (T) -> Unit = { value = it }

so anything you set using this lambda is assigned to value T

  • Related