美文网首页Android初学者
kotlin的with、apply

kotlin的with、apply

作者: YueDev | 来源:发表于2019-07-26 16:49 被阅读0次

    with和apply是kotlin标准库中的函数,用来对一个对象进行多次操作,例如一个函数alphabet(),作用是返回ABC字母表的字符串。

    fun alphabet(): String {
        val result = StringBuilder("alphabet:\n")
        for (letter in 'A'..'Z') {
            result.append(letter)
        }
        result.append("\nI know the alphabet")
        return result.toString()
    }
    
    //返回值
    //    alphabet:
    //    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    //    I know the alphabet
    

    上边函数中result: StringBuild一直在用,如果用with的话,可以这么写

    fun alphabetWith() = with(StringBuilder()) {
            append("alphabet:\n")
            for (letter in 'A'..'Z') {
                this.append(letter)
            }
            append("\nI know the alphabet")
            this.toString()
        }
    

    这样通过with把StringBuild委托给后边lambda,lambda里可以直接用this指代StringBuild或者直接调用StringBuild的方法。

    with的返回值是lambda的值,即最后lambda的一行,而apply返回的是整个对象:

    fun allphabetApply() = StringBuilder().apply {
        append("alphabet:\n")
        for (letter in 'A'..'Z') {
            append(letter)
        }
        append("\nI know the alphabet")
    }.toString()
    

    apply用起来和java里的构造者模式很像,比如我们自定义个View,采用构造者模式来初始化View的各个属性,用apply很简单就可以实现:

    fun createMyTextView(context: Context) = MyTextView(context).apply {
        text = "my text view"
        textSize = 20.0
        setPadding(10,10,10,10)
    }
    

    另外关与最开头的例子,kotlin有一个buildString函数,会自动生成一个StringBuild,并返回它的toString,用的就是apply实现的:

    fun alphabetBuildString() = buildString {
        append("alphabet:\n")
        for (letter in 'A'..'Z') {
            append(letter)
        }
        append("\nI know the alphabet")
    }
    

    相关文章

      网友评论

        本文标题:kotlin的with、apply

        本文链接:https://www.haomeiwen.com/subject/aiotbqtx.html