在连接到蓝牙设备的应用程序,我使用的使用RxKotlin以下功能:的Rx科特林:地图功能无法推断返回类型
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
}
}
这个函数应该简单地与后台连接BluetoothDevice类然后用套接字做一些事情(再次在mainthread中)。然而,map
不能处理return socket
部分,告诉我有一个Type mismatch
,它发现一个BluetoothSocket
它需要一个Unit
。
这里怎么回事?我认为地图应该能够推断返回类型。
您是否尝试过'return @ scan'而不是'return'? – Rehan
@Rehan:谢谢,那可行! (或者至少,它不再抱怨了,现在不能测试)但是对于我来说,'scan'看起来像纯粹的魔法......这是干什么用的?谨慎阐述? – Marcel50506
它用于避免模糊和返回嵌套函数中的值,就像上面的情况一样。自从我上周更新kotlin插件以来,我已经看到了android工作室的建议。你可以在这里阅读更多细节(https://kotlinlang.org/docs/reference/returns.html#return-at-labels)和[here](http://kotlinlang.org/docs/reference/lambdas。 html#lambda-expression-syntax):) – Rehan