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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kotlin实战指南十:let、apply、with、run

發(fā)布時間:2024/9/30 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin实战指南十:let、apply、with、run 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載請標明出處:https://blog.csdn.net/zhaoyanjun6/article/details//94402604
本文出自【趙彥軍的博客】


文章目錄

  • let
    • 示例1:基礎用法
    • 示例2:返回值
    • 示例3:android實戰(zhàn)
  • apply
    • 示例
  • with
    • 示例1:返回值為一個字符串
    • 示例2:返回值為 this
  • run
    • 示例

let

let可以配合可空性 “?”來使用,如果data=null 則不執(zhí)行l(wèi)et內(nèi)部代碼,如果有返回值則直接返回null
在let中,用it表示引用對象,并可調(diào)用其方法,it不可省略。
返回值是語句塊的最后一行的返回類型,若最后一行語句無返回值,則整個let語句塊也無返回值

示例1:基礎用法

class MainActivity : AppCompatActivity() {var list: ArrayList<Int>? = ArrayList()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)list?.let {it.add(1)it.add(2)it.add(3)}Log.e("zhaoyanjun:", "$list")} }

輸出結(jié)果:

[1, 2, 3]

示例2:返回值

class MainActivity : AppCompatActivity() {var list: ArrayList<Int>? = ArrayList()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//let的返回值為 let 語句塊的最后一行var result = list?.let {it.add(1)it.add(2)it.add(3)"ok"}Log.e("zhaoyanjun:", "$list $result" )} }

輸出結(jié)果:

E/zhaoyanjun:: [1, 2, 3] ok

示例3:android實戰(zhàn)

class MainActivity : AppCompatActivity() {private var tv: TextView? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)tv = findViewById(R.id.tv)tv?.let {it.text = "zhaoyanjun"it.textSize = 20fit.setOnClickListener {Toast.makeText(it.context, "click", Toast.LENGTH_SHORT).show()}}} }

apply

apply使用this指代T,函數(shù)值返回值是Unit。但apply通過return this主動返回T的實例。

@kotlin.internal.InlineOnly public inline fun <T> T.apply(block: T.() -> Unit): T {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}block()return this }

示例

創(chuàng)建LinearLayout并利用apply設置初始化參數(shù),最后返回初始化完畢的LinearLayout實例。

val linearLayout = LinearLayout(itemView.context).apply {orientation = LinearLayout.VERTICALlayoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT) }

上面的代碼等價于:

val linearLayout = LinearLayout(itemView.context) linearLayout.orientation = LinearLayout.VERTICAL linearLayout.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT)

如果構(gòu)造過程中需要初始化的變量較多,使用apply形成的代碼塊會非常直觀。

with

接收一個receiver和一個函數(shù)式,通過this調(diào)用receiver,返回值根據(jù)函數(shù)式最后一個返回值為準。

一般會在傳入receiver的時候就地創(chuàng)建實例,不然使用apply來替代with會是更好的選擇。

可為null時別和with搭檔

@kotlin.internal.InlineOnly public inline fun <T, R> with(receiver: T, block: T.() -> R): R {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}return receiver.block() }

示例1:返回值為一個字符串

with(ArrayList<String>()) {add("a")add("b")"ok"}

示例2:返回值為 this

var list = with(ArrayList<String>()) {add("a")add("b")this}list.add("c")

run

執(zhí)行傳入的函數(shù)式,并返回函數(shù)的執(zhí)行結(jié)果。run的主要目的是強調(diào)需要執(zhí)行的函數(shù)。

@kotlin.internal.InlineOnly public inline fun <R> run(block: () -> R): R {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}return block() }@kotlin.internal.InlineOnly public inline fun <T, R> T.run(block: T.() -> R): R {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}return block() }

示例

從intent取EXTRA_URL的值,不為非空且內(nèi)容不為空,賦值給url。否則彈出提示并關閉頁面。

// Init url:String url = intent.getStringExtra(EXTRA_URL)?.takeIf { it.isNotEmpty() } ?: run {toast("不能瀏覽一個空鏈接哦")activity.finish() }

個人微信號:zhaoyanjun125 , 歡迎關注
[外鏈圖片轉(zhuǎn)存失敗(img-PqVPXCqe-1562039687164)(http://res.qiniu.zhaoaiqiao.com/weixin200.jpg)]

總結(jié)

以上是生活随笔為你收集整理的Kotlin实战指南十:let、apply、with、run的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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