быстрое «завершение: @escaping» на языке котлин.Как использовать callback в kotlin? - PullRequest
0 голосов
/ 24 июня 2019

Я ищу способ завершения блока для моего кода kotlin. В Swift у меня есть моя функция:

func fetchRegister(with request: RegisterRequest, completion: @escaping (Result<RegisterResponse,DataResponseError>) -> Void) { 
//do some stuff
// if i got error i can use completion(Result.failure(DataResponseError.networking))
}

в котлине мой текущий код:

fun fetchRegister(withRequest: RegisterRequest, callback: (Result<RegisterResponse,DataResponseError>) -> Unit) {
//do some stuff
//cant use callback.onFailure(DataResponseError.networking)
}

Мой интерфейс результатов:

interface Result<T,U: DataResponseError>  {
 fun onSuccess(data: T)
 fun onFailure(Error: U)
}

и моя DataResponseError:

enum class DataResponseError(val errorMessage: String) {
 httpBody("An error occured while creating httpBody"),
 token("An error occured while getting token"),
 networking("An error occured while fetching data"),
 decoding("An error occured while decoding data")
}

На данный момент данные не могут быть получены из этой функции, я не могу использовать callback.onfailure или onSuccess с передачей данных. Как я могу это исправить?

1 Ответ

0 голосов
/ 24 июня 2019

Замените вашу fetchRegister функцию на:

fun fetchRegister(withRequest: RegisterRequest, callback: Result<RegisterResponse,DataResponseError>){
        //In case of success
        callback.onSuccess(data)
        // In case of failure
        callback.onFailure(DataResponseError.networking)
}



val callback = object : Result<RegisterResponse,DataResponseError> {
    override fun onSuccess(response: RegisterResponse) {
        // Do Something
    }

    override fun onFailure(error: DataResponseError) {
        // Do Something
    }
}


fetchRegister(request, callback)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...