Rx Kotlin:map函数不能推断返回类型
在连接到蓝牙设备的应用程序中,我正在使用下面的函数使用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 } }
这个函数应该简单地连接到背景上的蓝牙设备,然后用套接字(再次在mainthread中)做一些事情。 然而, map
无法处理return socket
部分,告诉我有一个Type mismatch
,它发现一个BluetoothSocket
它需要一个Unit
。
这里怎么了? 我认为地图应该能够推断返回类型。
在你的map函数中替换语句
return socket
同
return@map socket
因为return语句通常用于返回顶级函数的值。 对于lambda表达式和内联(嵌套)函数,请在标签处使用返回值,即return @ {method_name} 。 你也可以把最后一行留给socket
,编译器会为你处理,假定最后一行是内联函数的返回值。 但为了更好的可读性,我一定会喜欢合格的返回语法。 您可以在这里和这里阅读kotlin文档中的更多细节