Возвращаемое значение из функции переопределения - PullRequest
0 голосов
/ 17 января 2020

Я не уверен, что то, что я ищу, даже возможно. Если да, то для меня это ново.

вот базовый c план того, что я пытаюсь выполнить sh:

class MyClass : SomeInterface {

    fun makeSomethingHappen() {
        methodInInterfaceThatReturnsValueBelow()
    }

    override fun iDidSomething(result: Value) {
        //give this value back to the original caller of makeSomethingHappen()
    }

    override fun iDidSomethingElse(result: Value) {
        //give this value back to the original caller of makeSomethingHappen()
    }

    override fun onFailure(result: Value) {
        //give this value back to the original caller of makeSomethingHappen()
    }
}

Объяснение:

Мы используем необходимый SDK, который имеет около 15 переопределений. Я вызываю в этот класс для вызова функции в SDK. Эта функция будет вызывать одну из функций переопределения, когда она будет выполнена.

Есть ли способ (живые данные, потоки, что угодно), чтобы тот, кто вызвал makeSomethingHappen (), получил значение от любого из методов переопределения?

1 Ответ

1 голос
/ 17 января 2020

Это базовый c пример реактивного программирования. Вы ждете события, которое испускает производитель / наблюдаемый, это как когда вы объявляете прослушиватель щелчка на кнопке.

Вы не можете вернуть значение в makeSomethingHappen(), но вы можете создать слушатель, и наблюдатель реализует этот слушатель, чтобы получить значение.

typealias MyListener = (Value) -> Unit

class MyClass : SomeInterface {

    private var _listeners: List<MyListener> = mutableListOf()

    fun addListener(listener: MyListener) {
        _listeners.add(listener)
    }

    fun makeSomethingHappen() {
        methodInInterfaceThatReturnsValueBelow()
    }

    override fun iDidSomething(result: Value) {
        // Send result Value to the listener implementations
        _listeners.forEach { it.invoke(result) }
    }

    override fun iDidSomethingElse(result: Value) {
        // Send result Value to the listener implementations
        _listeners.forEach { it.invoke(result) }
    }

    override fun onFailure(result: Value) {
        // Send result Value to the listener implementations
        _listeners.forEach { it.invoke(result) }
    }
}

Вы можете получить результат реализация MyListener

val myClass = MyClass()
myClass.makeSomethingHappen { value ->
    // Here you have the value and you can do whatever
    print(value)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...