我正在尝试将函数作为参数传递,但它抛出'Unit不能作为函数调用.提前致谢.
uploadImageToParse(imageFile, saveCall1())
uploadImageToParse(imageFile, saveCall2())
uploadImageToParse(imageFile, saveCall3())
private fun uploadImageToParse(file: ParseFile?, saveCall: Unit) {
saveCall()//Throws an error saying 'Unit cannot be invoked as function'
}
Run Code Online (Sandbox Code Playgroud)
Jan*_*son 25
问题是,您没有将函数作为参数传递给uploadImageToParse方法.你传递的结果.此外,uploadImageToParse方法期望safeCall是单位参数而不是函数.
为此,您必须首先声明uploadImageToParse期望一个函数参数.
fun uploadImageToParse(file: String?, saveCall: () -> Unit) {
saveCall()
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将函数参数传递给此方法.
uploadImageToParse(imageFile, {saveCall()})
Run Code Online (Sandbox Code Playgroud)
有关该主题的更多信息,请参阅Kotlin文档中的高阶函数和Lambdas.
编辑:正如@marstran所指出的,您还可以使用函数参考将该函数作为参数传递.
uploadImageToParse(imageFile, ::saveCall)
Run Code Online (Sandbox Code Playgroud)
小智 8
接受函数指针作为参数是这样完成的:
private fun uploadImageToParse(file: ParseFile?, saveCall: () -> Unit){
saveCall.invoke()
}
Run Code Online (Sandbox Code Playgroud)
是()参数的类型。
该-> Unit部分是返回类型。
第二个例子:
fun someFunction (a:Int, b:Float) : Double {
return (a * b).toDouble()
}
fun useFunction (func: (Int, Float) -> Double) {
println(func.invoke(10, 5.54421))
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Kotlin 文档
| 归档时间: |
|
| 查看次数: |
6663 次 |
| 最近记录: |