IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin作用域函数 -> 正文阅读

[移动开发]Kotlin作用域函数

目录

apply

run

let

also

with

总结???????

??????????????


//定义变量view,后面示例以view调用作用域函数

val view = View(context)

??????????????


apply

public inline fun <T> T.apply(

block: T.() → Unit

): T

在代码块内可以使用this引用调用者,apply的返回值是调用者本身

示例:

view.apply{

this.setVisibility(View.GONE)

this.getVisbility()

}

this可以省略:

view.apply{

setVisibility(View.GONE)

getVisbility()

}

用java代码来理解:

public View apply(){

setVisibility(View.GONE);

getVisbility();

return this;

}

?这里的返回值类型,由调用者的类型决定?

因为这里调用者是一个View对象,所以返回值类型就是View


run

public inline fun <T, R> T.run(

block: T.() → R

): R

和apply相同,区别是run会将代码块内最后一行代码作为返回值,所以run函数内至少要有一行代码

(从函数声明可以看出,run接收的lambda是带返回值的,这个返回值也会作为run函数的返回值)

示例:

view.run{

setVisibility(View.GONE)

getVisbility()

}

java代码理解:

public int run(){

setVisibility(View.GONE);

return getVisbility();

}

这里的返回值类型,由代码块中最后一行代码对应的表达式的值的类型决定?

因为this.getVisbility()返回一个int值,所以返回值类型就是int??


?let

public inline fun <T, R> T.let(

block: (T) → R

): R

和run相同,区别是run中使用this代表调用者,let中使用it代表调用者。

示例:

view.let{

it.setVisibility(View.GONE)

it.getVisbility()

}

和run的区别是it不可省略

用java代码来理解:

public View let(View it){

it.setVisibility(View.GONE);

return it.getVisbility();

}


also

public inline fun <T> T.also(

block: (T) → Unit

): T

和apply相同,区别是apply中使用this代表调用者,also中使用it代表调用者

示例:

view.also{

it.setVisibility(View.GONE)

it.getVisbility()

}

和apply的区别是it不可省略

用java代码来理解:

public View also(View it){

it.setVisibility(View.GONE);

it.getVisbility();

return this;

}

???????


with

public inline fun <T, R> with(

receiver: T,

block: T.() → R

): R

和run相同,区别是with是一个顶层函数,不能通过调用者去调用,需要把调用者作为第一个参数传递给with,代码块作为第二个参数传递给with

示例:

with(view){

setVisibility(View.GONE)

getVisbility()

}

java代码理解:

public static int with(View this){

this.setVisibility(View.GONE);

return this.getVisbility();

}


总结???????

这几个函数的相同点都是能通过lambda快捷在代码块中对调用者执行操作,区别是在代码块中引用调用者的方式有不同(分this和it两种),返回值不同(有返回调用者自身和返回代码块最后一行代表的值两种),除了with是顶层函数以外,其他函数都是Any类的扩展函数,可以适用于任何对象。

apply比较常用,可以代替java中的链式调用。

also和apply功能一致,需要显式写出it。

run适用于在apply的基础上,需要在代码块内部拿到调用者,对调用者执行一些操作后,返回一个新的值。

let和run功能一致,需要显式写出it(和apply与also的区别一样)。

with和run功能一致,代码书写方式不同。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 12:13:24  更:2021-08-13 12:15:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 23:54:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码