Daniele B
09/03/2020, 3:48 PMdata class
object:
val state : AppState = AppState()
where:
data class AppState (
val loginState : LoginState = LoginState(),
val showingDetail : Boolean = false,
)
data class LoginState (
val loginVar : String
)
if I want to just change a child property, it’s very simple, it just takes 1 line:
state = state.copy(showingDetail = true)
but it I want to change the property of one child, I need 3 lines:
var login = state.loginState
login = login.copy(loginVar = "my value")
state = state.copy(loginState = login)
is there a simpler syntax to achieve this?Tobias Berger
09/03/2020, 3:52 PMstate = state.copy(loginState = state.loginState.copy(loginVar = "my value"))
I'm just not sue if that makes it betterstate = state.run { copy(loginState = loginState.copy(loginVar = "my value")) }
Daniele B
09/03/2020, 3:58 PMupdateLoginState(loginVar = "my value")
but I don’t know how to write a function that, which takes the same arguments of copyfun updateLoginState (I DON'T KNOW HOW TO DEFINE THE ARGUMENTS) {
var login = state.loginState
login = login.copy(ARGUMENTS)
state = state.copy(loginState = login)
}
Tobias Berger
09/03/2020, 4:04 PMDaniele B
09/03/2020, 4:06 PMcopy
a very special function?Tobias Berger
09/03/2020, 4:06 PMDaniele B
09/03/2020, 4:07 PMTobias Berger
09/03/2020, 4:08 PMdata class LoginState (
val loginVar : String
) {
fun copy(loginVar: String = this.loginVar) : LoginState {
return LoginState(loginVar)
}
}
Daniele B
09/03/2020, 4:11 PMTobias Berger
09/03/2020, 4:11 PMDaniele B
09/03/2020, 4:12 PMTobias Berger
09/03/2020, 4:13 PMfun AppState.updateLoginState (loginVar: String = loginState.loginVar) {
state = state.copy(loginState = LoginState(loginVar))
}
loginState
as defaults for the optional function parametersDaniele B
09/03/2020, 4:14 PMTobias Berger
09/03/2020, 4:18 PMDaniele B
09/03/2020, 4:18 PMTobias Berger
09/03/2020, 4:27 PMDaniele B
09/03/2020, 4:33 PMupdateLoginState(state.loginState.copy(loginVar = "my value"))
I would like to be able to do like this:
updateLoginState(loginVar = "my value")
but it’s not the end of the worldupdateLoginState()
function is this one:
fun updateLoginState(loginState: LoginState) {
state = state.copy(loginState = loginState)
}
Tobias Berger
09/03/2020, 4:50 PMfun updateLoginState(loginVar: String) {
state = state.copy(loginState = state.loginState.copy(loginVar = loginVar))
}
Sure, that's the manual implementation again. But personally I'd prefer that rather than doing the copy outside.Adam Powell
09/03/2020, 5:25 PM