Kotlin:使用带接收者的lambda的apply与with函数简化代码
发表于更新于
广州
开发androidKotlin:使用带接收者的lambda的apply与with函数简化代码
❄️2winter使用kotlin的标准库函数:with函数
iwh_tab是一个实例化的android tab组件
with函数接收两个参数,第一个是接收者,第二个是一个lambda,并且将第一个参数传入第二个lambda对象使用
我们看看基本:根据lambda约定,我们把大花括号移到外部!
1 2 3 4
| with(iwh_tab,{ })
with(iwh_tab){}
|
lambda中的this指向传入的参数iwh_tab
1 2 3 4 5 6 7
| with(iwh_tab){ this.setSelectedTabIndicatorColor(Color.WHITE) this.setTabTextColors(Color.WHITE,Color.WHITE) this.addTab(this.newTab().setText("基础理论与操作题")) this.addTab(this.newTab().setText("选择题库")) this.addTab(this.newTab().setText("我的")) }
|
我们也可以省略this
1 2 3 4 5 6 7
| with(iwh_tab){ setSelectedTabIndicatorColor(Color.WHITE) setTabTextColors(Color.WHITE,Color.WHITE) addTab(this.newTab().setText("基础理论与操作题")) addTab(this.newTab().setText("选择题库")) addTab(this.newTab().setText("我的")) }
|
有同学会发现,这个with函数没法返回一些需要初始化的对象,只能简化一些重复使用同一对象不同方法的场景,我们再看看另一个apply函数的使用:apply是以扩展函数实现的,该函数能够在执行lambda后返回该对象自身。
下面是一个自定义的Toast:用了with与apply,结构很简单。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
fun iwhToast(showText: String, gravity: Int = Gravity.BOTTOM, type: Int = R.color.right) {
val iwhContext = App._context val setParame = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) val iwhText = TextView(iwhContext).apply { setTextColor(Color.WHITE) textAlignment = TextView.TEXT_ALIGNMENT_CENTER setPadding(5, 5, 5, 5) layoutParams = setParame
}
val iwhLyout = LinearLayout(iwhContext).apply { layoutParams = setParame setBackgroundResource(type) addView(iwhText) }
with( Toast.makeText(App.getContext(), showText, Toast.LENGTH_SHORT)){ setGravity(Gravity.FILL_HORIZONTAL or gravity, 0, 0) view = iwhLyout setMargin(0f, 0f) iwhText.text = showText show() }
}
|
❄️2winter
ReactNative FullStack Developer
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ❄️2winter!