Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

27.4. Callback 回调

27.4.1. Consumer

			
speakerRecognition.recognition(value.payload.result, Consumer { name: String ->
    honorific.put(value.payload.speaker_id, name)
    Log.i(TAG, "说话人识别:" + value.payload.speaker_id + " " + name)

})
			
			

27.4.2. callback

			
// 定义带返回值的回调函数类型
fun processData(input: String, callback: (String) -> String) {
    val result = callback(input) // 执行回调并获取返回值
    println("处理后的结果:$result")
}

// 使用
fun main() {
    processData("hello") { input ->
        input.uppercase() // 回调返回大写后的字符串
    }
    // 输出:处理后的结果:HELLO
}			
			
			

27.4.3. 定义接口方式

			
// 1. 定义无返回值的回调接口
interface OnStatusListener {
    fun onStart() // 开始时回调(无返回值)
    fun onProgress(percent: Int) // 进度回调(有参数,无返回值)
    fun onFinish() // 结束时回调(无返回值)
}

// 2. 实现回调发送者
class Downloader {
    private var listener: OnStatusListener? = null

    fun setOnStatusListener(l: OnStatusListener) {
        listener = l
    }

    fun startDownload() {
        listener?.onStart() // 触发开始回调
        
        // 模拟下载进度
        for (i in 1..100 step 20) {
            Thread.sleep(500)
            listener?.onProgress(i) // 触发进度回调(无返回值)
        }
        
        listener?.onFinish() // 触发结束回调
    }
}

// 3. 使用回调
fun main() {
    val downloader = Downloader()
    downloader.setOnStatusListener(object : OnStatusListener {
        override fun onStart() {
            println("下载开始") // 无返回值,仅执行逻辑
        }

        override fun onProgress(percent: Int) {
            println("下载进度:$percent%") // 无返回值
        }

        override fun onFinish() {
            println("下载完成") // 无返回值
        }
    })
    
    downloader.startDownload()
}