Mar*_*506 6 android rx-kotlin reactivex
在连接到蓝牙设备的应用程序中,我使用以下函数使用RxKotlin:
private fun startBluetoothPair(device: BluetoothDevice) {
Observable.just(device)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map {
var uuid: UUID = BLUETOOTH_UUID
var socket = it.createRfcommSocketToServiceRecord(uuid)
socket.connect()
return socket
}
.subscribe {
// Do something with the BluetoothSocket
}
}
Run Code Online (Sandbox Code Playgroud)
这个函数应该只是在背景上与蓝牙设备连接,然后对套接字做一些事情(再次在主线程中).但是,map无法处理的return socket部分,告诉我有一个Type mismatch,它找到了BluetoothSocket它需要的地方Unit.
这里出了什么问题?我认为地图应该能够推断出返回类型.
Reh*_*han 26
在map函数中替换该语句
return socket
Run Code Online (Sandbox Code Playgroud)
同
return@map socket
Run Code Online (Sandbox Code Playgroud)
因为return语句通常用于返回顶级函数的值.对于lambda表达式和内联(嵌套)函数,请使用标签返回,即返回@ {method_name}.您也可以在最后一行留下socket,并且编译器将为您处理它,假设最后一行作为内联函数的返回值.但为了更好的可读性,我肯定更喜欢合格的返回语法.您可以在此处和此处阅读kotlin文档中的更多详细信息
| 归档时间: |
|
| 查看次数: |
3930 次 |
| 最近记录: |