Kurt Renzo Acosta
12/06/2019, 9:54 AMclass MyViewModel(private val useCase: UseCase) : ViewModel() {
fun doSomething() {
useCase()
liveData.value = "New Value"
}
}
class MyPresenter(private val myView: MyView, private val useCase: UseCase) : BasePresenter() {
fun doSomething() {
useCase()
myView.updateView("New Value")
}
}
I wanted to extract the common code between them so initially, I created an expected class and wanted something like this:
expect class MyCommonClient(useCase: UseCase) {
fun doSomething() {
useCase()
success("New Value")
}
expect fun success(newValue: String)
}
But then, Expected declaration must not have a body
So I tried out a class:
abstract class MyCommonClient(useCase: UseCase) {
fun doSomething() {
useCase()
success("New Value")
}
abstract fun success(newValue: String)
}
But now, I'm having multiple supertypes
class MyViewModel : ViewModel(), MyCommonClient() <--- Error
Am I running towards a wall or is there any workaround or pattern to achieve something like this?
Thanks in advance!Tobi
12/06/2019, 10:07 AMsuccess
per platform into your common client.
expect class Foo {
fun success(value: String)
}
class MyCommonClient(
private val foo: Foo,
private val useCase: UseCase
) {
fun doSomething() {
useCase()
foo.success("New Value")
}
}
Kurt Renzo Acosta
12/06/2019, 10:13 AMclass MyViewModel : ViewModel(), MyCommonClient()
Tobi
12/06/2019, 10:14 AMKurt Renzo Acosta
12/06/2019, 10:17 AMAndreas Jost
12/06/2019, 10:18 AMclass ClientImpl(override val useCase: UseCase) : MyCommonClient {
override fun success(newValue: String) {
// Impl
}
}
interface MyCommonClient {
val useCase: UseCase
fun doSomething() {
useCase()
success("New Value")
}
fun success(newValue: String)
}
class MyViewModel(useCase: UseCase) : ViewModel(), MyCommonClient by ClientImpl(useCase)
Kurt Renzo Acosta
12/06/2019, 10:27 AMEllen Shapiro
12/06/2019, 10:50 AMKurt Renzo Acosta
12/06/2019, 11:08 AMdarkmoon_uk
12/06/2019, 12:57 PMKurt Renzo Acosta
12/07/2019, 12:13 AMDmitri Sh
12/07/2019, 3:40 AMEllen Shapiro
12/07/2019, 6:25 PM