Kotlin之分享几个有用的扩展方法和扩展属性(一)

个人认为扩展方法和扩展属性存在的意义就是自己去弥补原生API的不足,方便程序员开发,减少一些无聊的模板代码,提升代码的可读性,所以分享几个写项目我必添加的扩展方法和属性。

一、扩展方法和扩展属性的写法

1、扩展方法

fun Object.name(parm){
   //做一些处理
}

函数里面可以调用被扩展类的属性和方法,完之后Object对象就可以调用name()方法了。

2、扩展属性

Object.name:Object //第一个Object是被扩展的类  第二个Object是扩展的属性类型
	get(){
		//做一些处理
		return Object //属性类型
	}

Object对象就有了name属性。

如果这些放在某个类里面,那么只能这个类或者子类使用,一般我们都需要全局使用,所有需要放到一个不包含类的kt文件里,比如Extension.kt,这样就变成静态方法可以全局调用。

二、日志打印

fun Any?.log(tag: String= "TAG"){
    if(BuildConfig.IS_DEBUG){//只在debug环境下打印
        if(this == null)
            Log.d(tag,"null")
        else {
            Log.d(tag, this.toString())
        }
    }
}

要打印日志原始写法真的太麻烦了,直接给Any添加扩展方法,再加上参数设置默认值,任何对象都能方便的打印日志:

object.log()
"哈哈哈".log()
1.log("number")

三、输入框内容监听

原生的写法就是写个匿名类实现TextWatcher接口,该接口有三个方法,但绝大部分情况只需要用到其中的onTextChanged方法,每次写三个方法实在太影响美观了,可以这么做:

fun EditText.setTextChangedListener(call:(String)->Unit){
    this.addTextChangedListener(object : TextWatcher {
        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

        }

        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            call.invoke(p0.toString())
        }

        override fun afterTextChanged(p0: Editable?) {

        }

    })
}

输入框调用setTextChangedListener扩展方法,使用起来就简单清晰很多了:

et.setTextChangedListener {
	it.log()
}

四、输入框过滤空格

有的输入框要求不能输入空格,比如账号密码输入框,结合上一个扩展方法很容易实现:

fun EditText.notSpace(){
    this.setTextChangedListener {
        if(it.contains(" ")){
            this.setText(it.replace(" ","",true))
            this.setSelection(this.text.length)
        }
    }
}

使用方法

binding.etPassword.notSpace()

五、设置控件是否可见

原生的写法是:

view.visibility = View.VISIBLE//可见
view.visibility = View.GONE//不可见

这样太麻烦了,想直接设置ture和false,那么可以这么扩展:

fun View.visible(boolean: Boolean){
    if(boolean){
        this.visibility = View.VISIBLE
    }else{
        this.visibility = View.GONE
    }
}

用法就是:

view.visible(false)
view.visible(true)

舒服!

Kotlin之分享几个有用的扩展方法和扩展属性(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值