kt的let、apply、with、run的含义和使用

本文介绍了Kotlin中四个常用的函数:let, apply, with和run的用法和区别。let主要用于非空判断,确保在不抛出异常的情况下安全调用方法。apply则在设置对象属性时返回该对象,常用于链式调用。with函数的上下文是接收者对象,允许在其中执行操作。run与apply类似,但其内部的this引用指向的是接收者对象。通过实例代码,文章详细解析了这四个函数的使用场景和最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • let
 /**
     * 综下:使用let会返回一个叫it的该对象,当然了,it是可以改名字的,用lamda表达式,我觉得let主要是用于非空判断的
     */
    private fun ktLetUsage() {
//        用例1
        iv_image.let {
            it.setImageResource(R.mipmap.ic_launcher_round)
        }
//        等价于,但是其实你看这里的let会有一个黄色的提示的标志,as会提示你删除掉let,因为这里的let没什么必要
        iv_image.setImageResource(R.mipmap.ic_launcher_round)

//        用例2
        seekBar?.progress?.let {
            PlayerManager.ximalayaPlayer.seekToByPercent(it / 100f)
        }
//        等价于,但是你看这里的seekBar?.progress是用了断言的,这样很不好,因为很多时候你都没办法判断这个参数是不是一定不为空,所以这里推荐使用let
        PlayerManager.ximalayaPlayer.seekToByPercent(seekBar?.progress!! / 100f)
    }
  • apply
  /**
     * 综下可知:apply主要是用于设置值并且返回该对象
     * 简单来说,apply就是,方便多个设置值,且可以返回该对象
     */
    private fun ktApplyUsage() {
//        用例1
        //apply之后花括号里面就有一个对应的类型,就是说,apply里面会返回一个该类型的对象,你可以这个对象来设置值,或者用来做返回值都可以
        iv_image.apply {
            setImageResource(R.mipmap.ic_launcher_round)
        }
//        上面的用法等同于,因为这里没用到iv_image的返回值,所以其实这里看不出来什么
        iv_image.setImageResource(R.mipmap.ic_launcher_round)

//        用例2
        SearchHistoryFragment().apply {
            arguments = Bundle().apply {
                putInt("test", 1)
            }
        }
//        等价于   所以说,上面的第二个apply的花括号里面返回的bundle对象就被赋值给了arguments
        val bundle = Bundle()
        bundle.putInt("test", 1)
        SearchHistoryFragment().arguments = bundle
//        等价于
        SearchHistoryFragment().apply {
            arguments = bundle
        }
//        等价于
        SearchHistoryFragment().arguments = Bundle().apply {
            putInt("test", 1)
        }
//        如果想直接  SearchHistoryFragment().arguments = Bundle(). putInt("test", 1) 是不行 的,因为这里的putInt是没得返回值的

//        用例3
        arguments?.apply {
            type = getInt("test", 1)
        }
//        等价于,但是你看这里用了断言,但是断言其实不是很好,因为有时候你是不确定这个值是不是一定不为空的,所以还是apply香
        type = arguments?.getInt("test", 1)!!
    }
  • with
项目中美用到过with的用法,且看别人写的用法也看不懂,这里就不写啦
  • run
咋又看不懂了。。。哎
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值