日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Kotlin let、with、run、apply、also函数的使用

發(fā)布時(shí)間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin let、with、run、apply、also函数的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

let,with,run,apply,also 是內(nèi)聯(lián)擴(kuò)展函數(shù)

下面是自己使用的心的如果有錯(cuò)的地方希望給予指正謝謝

這幾個(gè)主要用來(lái)簡(jiǎn)化操作,使得代碼可讀性提高 ,下面列舉項(xiàng)目中使用效果

1 let?

?先不啰嗦了 直接代碼吧 ,

不是let? 的代碼

 val list = ArrayList<String>()list.add("A")list.add("B")list.add("C")for (i in list.indices) {println(list[i])}

使用let 之后如下

         val list = ArrayList<String>()list.let {it.add("A")it.add("B")it.add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======",list[i])}

他們對(duì)比發(fā)現(xiàn)list 沒(méi)有反復(fù)的使用, 不過(guò)卻有一個(gè)it?

自己在項(xiàng)目中測(cè)試let也使用了

沒(méi)有使用let 如下?

這個(gè)是刷新的地方, 估計(jì)很多人都在使用,是不是刷新的id要寫(xiě)2次

class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }

使用let如下

class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)smart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}

剛才是自己點(diǎn)擊let看看源碼

/*** Calls the specified function [block] with `this` value as its argument and returns its result.*/
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}return block(this)
}

百度翻譯下 let 注釋?

以' this '值作為參數(shù)調(diào)用指定的函數(shù)[block]并返回其結(jié)果。

?

2 with

還是用剛才的list代碼 用with 試試

   val list = ArrayList<String>()with(list){add("A")add("B")add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======",list[i])}

這個(gè)寫(xiě)法和剛才的有很大差別是不是

在使用with 實(shí)現(xiàn)刷新

class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//原始的smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }//letsmart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}//withwith(smart) {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}

?

with 的源碼

?

/*** Calls the specified function [block] with the given [receiver] as its receiver and returns its result.*/
@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}return receiver.block()
}

翻譯下with的注釋:

使用給定的[receiver]調(diào)用指定的函數(shù)[block]并返回其結(jié)果。

?

3 run?

使用剛才的list 如下

 val list = ArrayList<String>()list.run {add("A")add("B")add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======", list[i])}

在寫(xiě)一些刷新看看

class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//原始的smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }//letsmart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}//withwith(smart) {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//runsmart.run {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}

?

這些我沒(méi)把let ,with 去掉方便大家對(duì)比查看,實(shí)現(xiàn)的效果是一樣的

?

run的源碼

/*** Calls the specified function [block] with `this` value as its receiver and returns its result.*/
@kotlin.internal.InlineOnly
public inline fun <T, R> T.run(block: T.() -> R): R {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}return block()
}

翻譯注釋

調(diào)用指定的函數(shù)[block],并以' this '值作為其接收方,返回其結(jié)果。

4 apply

剛開(kāi)的list 使用apply 如下

 val list = ArrayList<String>()list.apply {add("A")add("B")add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======", list[i])}

apply 實(shí)現(xiàn)的刷新 如下

class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//原始的smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }//letsmart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}//withwith(smart) {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//runsmart.run {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//applysmart.apply{setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}

apply的源碼

/*** Calls the specified function [block] with `this` value as its receiver and returns `this` value.*/
@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}block()return this
}

翻譯注釋

調(diào)用指定的函數(shù)[block],并將' this '值作為其接收器,返回' this '值。

5 also

使用剛才的list also 的使用如下

  val list = ArrayList<String>()list.also {it.add("A")it.add("B")it.add("C")}for (i in list.indices) {println(list[i])Log.e("==============hly=======", list[i])}

?

also 的刷新如下

class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener {override fun onRefresh(refreshLayout: RefreshLayout) {}override fun onLoadMore(refreshLayout: RefreshLayout) {}@SuppressLint("LongLogTag")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//原始的smart.setOnRefreshListener { this@MainActivity }smart.setOnLoadMoreListener { this@MainActivity }//letsmart.let {it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}//withwith(smart) {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//runsmart.run {setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//applysmart.apply{setOnRefreshListener { this@MainActivity }setOnLoadMoreListener { this@MainActivity }}//alsosmart.also{it.setOnRefreshListener { this@MainActivity }it.setOnLoadMoreListener { this@MainActivity }}

這個(gè)幾個(gè)寫(xiě)法和對(duì)比都在這里, 我自己都一一測(cè)試過(guò)的,局可以實(shí)現(xiàn) ,

以上就是他們的使用方法 , 有不明白的或者錯(cuò)誤的希望指點(diǎn)一下,相互進(jìn)步.....

?

總結(jié)

以上是生活随笔為你收集整理的Kotlin let、with、run、apply、also函数的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。