前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Frame] views-dsl 中使用高阶函数的源码

[Frame] views-dsl 中使用高阶函数的源码

原创
作者头像
用户3702315
修改2021-03-15 17:47:56
4460
修改2021-03-15 17:47:56
举报
文章被收录于专栏:安卓开发
简介

Create UIs with readable Kotlin code.

Github

https://github.com/LouisCAD/Splitties/tree/main/modules/views-dsl

示例
代码语言:txt
复制
// 构造一个 Button:传递要设置的id
// You should use `button { … }` instead though.
val submitBtn = view<Button>(R.id.btn_submit) { 
    textResource = R.string.submit
}

val launchDemoBtn = button {
    textResource = R.string.go_to_the_demo
}
示例

代码

代码语言:txt
复制
// 构造自定义的View:传递构造函数、要设置的id
val myView: MyCustomView = view(::MyCustomView, R.id.my_view) {
    backgroundColor = Color.BLACK
}

定义

代码语言:txt
复制
typealias NewViewRef<V> = (Context) -> V

// 扩展方法:所以不用传 Context 对象
inline fun <V : View> Context.view( 
    createView: NewViewRef<V>, 
    @IdRes id: Int = View.NO_ID, 
    @StyleRes theme: Int = NO_THEME, 
    initView: V.() -> Unit = {} 
 ): V {
    ...
}

知识

代码语言:txt
复制
// 将函数作为参数或者返回函数的函数叫高阶函数
fun 高阶函数名(参数函数名:参数函数类型):高阶函数返回类型{
    高阶函数体
    ...
}

// 定义一个高阶函数
fun cacl(a:Int, b:Int, action:(Int,Int)->Int):Int{
    return action(a,b)
}

// 调用上面高阶函数
var sum = cacl(20, 30, { m, n ->
    m + n
})

讲解

  1. 上面示例的 view(::MyCustomView, R.id.my_view) 的参数一正是函数类型引用参数,这里使用构造函数作为参数传递。
  2. typealias 定义一个类型别称:typealias NewViewRef<V> = (Context) -> V

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • Github
  • 示例
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档