【问题标题】:swift "completion: @escaping" in kotlin language. How to use callback in kotlin?在 kotlin 语言中快速“完成:@escaping”。如何在 kotlin 中使用回调?
【发布时间】:2019-06-24 10:43:20
【问题描述】:

我正在为我的 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))
}

在 kotlin 中,我当前的代码是:

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 传递数据。我该如何解决?

【问题讨论】:

    标签: android swift kotlin callback


    【解决方案1】:

    将您的 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)
    

    【讨论】:

    • 但它会返回数据吗? onSuccess 它应该返回 RegisterResponde 和 onFailure DataResponseError。
    • 如何在其他类中调用这个函数?我现在需要通过 Result ??
    猜你喜欢
    • 2018-12-05
    • 2018-05-10
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多