我正在使用函数类型来存储要在按钮点击时调用的代码
如何从此功能类型返回
代码如下:
var SearchClickEvent: ((searchString: String) -> Unit)? = null
inputDialog!!.SearchClickEvent = Search_Click
private val Search_Click = { searchString: String ->
if(searchString.isEmpty()){
return//Error msg : return is not allowed here
//How to return from here
}
}
注意:我将一段代码存储在一个不调用或写入任何函数的变量中
答案 0 :(得分:8)
您需要在lambda中创建一个带有显式return语句的label,例如:
// label for lambda---v
val Search_Click = action@{ searchString: String ->
if (searchString.isEmpty()) {
return@action;
}
// do working
}
OR 将if语句反转如下:
val Search_Click = { searchString: String ->
if (!searchString.isEmpty()) {
// do working
}
}
答案 1 :(得分:1)
你也可以这样做:
ShapeDrawable shapeDrawable = (ShapeDrawable) ContextCompat.getDrawable(getActivity(), R.drawable.name);
shapeDrawable.getPaint().setColor(ContextCompat.getColor(mContext,R.color.colorToSet))
Kotlin in Action:
如果你在lambda中使用
private val Search_Click = fun(searchString: String) { if (searchString.isEmpty()) return // more code }
关键字,它将从 你调用lambda的函数,而不仅仅是lambda 本身。这样的return
语句称为非本地返回,因为 它从比包含return
的块更大的块返回 言。规则很简单:
return
从最近的函数返回 使用return
关键字声明。 Lambda表达式不使用fun
关键字,因此lambda中的fun
从外部返回 功能