Radoslaw Juszczyk
01/14/2022, 6:47 AMinterface SomeViewModelDelegate {
fun consumeState(state: State)
}
sealed class State {
object Loading: State()
data class Loaded(
val data: String,
): State()
data class Error(val errorMessage: String): State()
}
In this case only State is exposed to swift but not Loading, Loaded, Error so I cannot type check nor cast it to these specific types.
Any ideas how to get it exposed to swift?Radoslaw Juszczyk
01/14/2022, 6:50 AMinterface SomeViewModelDelegate {
fun consumeStateLoading(state: State.Loading)
fun consumeStateLoaded(state: State.Loaded)
fun consumeStateError(state: State.Error)
}
but I am not a fan of itxxfast
01/14/2022, 11:25 AMsealed class LoginState : Parcelable {
abstract val version: String
data class IdleState(
override val version: String,
val inputs: UsernamePasswordState,
) : LoginState() {
// State copy extensions for native clients
fun doCopyInputs(inputs: UsernamePasswordState) = copy(inputs = inputs)
}
@Parcelize
data class LoadingState(
override val version: String,
val step: LoadingStep
) : LoginState()
}
which is accessible from swift like
switch viewModelDelegate.state {
case let idleState as LoginState.IdleState :
UsernamePasswordView(
state: idleState.inputs,
...
)
case let progressState as LoginState.LoadingState:
switch progressState.step {
case .checkingcredentials:
ProgressView(..)
..
}
default: ProgressView(MR.strings().login_loadingDefaultText.localised())
}
xxfast
01/14/2022, 11:25 AMState.Loading
?Anton Afanasev
01/14/2022, 2:29 PMswitch state {
case _ as State.Loading:
// handle loading here
case let loaded as State.Loaded:
loaded.data.description // operate the `data` as a payload of state Loaded.
default:
// On kotlin native sealed classes are not exhaustive so `default` case is a must
}
Radoslaw Juszczyk
01/14/2022, 2:32 PMAnton Afanasev
01/14/2022, 2:35 PMRadoslaw Juszczyk
01/14/2022, 2:36 PMAnton Afanasev
01/14/2022, 2:37 PM.h
file if it contains this states. They should be there (unless this states are package private / internal) If they are there, you should be able to work with them.Radoslaw Juszczyk
01/14/2022, 2:47 PMRadoslaw Juszczyk
01/14/2022, 2:48 PMAnton Afanasev
01/14/2022, 2:51 PMRadoslaw Juszczyk
01/14/2022, 2:51 PMRadoslaw Juszczyk
01/14/2022, 2:51 PMRadoslaw Juszczyk
01/14/2022, 2:52 PMRadoslaw Juszczyk
01/14/2022, 2:53 PM