如何从Kotlin函数类型返回

时间:2017-06-27 04:56:36

标签: android kotlin

我正在使用函数类型来存储要在按钮点击时调用的代码 如何从此功能类型返回
代码如下:

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
    }
}

注意:我将一段代码存储在一个不调用或写入任何函数的变量中

2 个答案:

答案 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从外部返回   功能