官术网_书友最值得收藏!

Compose是基于Kotlin構建的,所以學習Compose之前需要溫習Kotlin的一些知識。

在編寫Kotlin的時候,可以在類的構造方法或者普通方法中使用默認參數,以此減少大量重載方法。舉個例子:

class DefaultParam {
    companion object {
        private const val TAG = "DefaultParam"
    }

    fun test() {
        test1(0)
        Test(b = "")
    }

    fun test1(a: Int, b: String = "") {
        Log.e(TAG, "test1: a:$a   b:$b")
    }
}

data class Test(val a: Int = 0, val b: String)

上面的代碼構建了一個Test類,構造方法中接收兩個參數,第一個有默認值,第二個沒有,所以調用的時候就可以不寫第一個參數。DefaultParam類中還有一個test1的方法,也接收兩個參數,不同的是,第一個參數沒有默認值,也就是必須設置,而第二個參數有默認值。

這兩種調用的區別在于:如果第一個參數沒有默認值,可以省略命名參數,反之則不能省略命名參數。如果一次性將所有參數都傳入而不使用參數默認值,也可省略命名參數。使用命名參數可以使代碼更具描述性。

默認參數在Compose中使用得非常廣泛,基本每一個控件都會用到,因此大家需要掌握Kotlin的默認參數。

自從開始學習Kotlin,就一直聽到“高階函數”這個詞,其實它并不難,能接收其他函數作為參數的函數就是高階函數。一個簡單的高階函數如下所示:

class HigherFunctions {

    companion object {
        private const val TAG = "HigherFunctions"
    }

    fun test() {
        high({
            Log.e(TAG, "test: string: $it")
        }, "test")
    }

    fun high(one: (String) -> Unit, string: String) {
        // 或者使用one.invoke進行調用
        one(string)
    }

}

上面示例代碼中的high就是一個高階函數,因為它接收其他函數作為參數。使用高階函數時,既可以直接傳入lambda表達式,也可以傳入方法。

在Compose中很多地方用到了尾隨lambda表達式。尾隨lambda表達式是Kotlin提供的一種特殊語法,在調用最后一個參數為lambda的高階函數時,可以將lambda表達式放在圓括號后面,而不是將其放在圓括號內。來看一個例子:

fun test2() {
    high2 {
        Log.e(TAG, "test: string: $it")
    }
}

fun high2(two: () -> Unit) {
    two()
}

上面代碼中的high2是一個高階函數,因為它只有一個參數,其參數類型還是一個函數,所以可以使用尾隨lambda來進行調用,省略了圓括號。

數據類在Kotlin中很常見,前面的例子中也用到了數據類。當我們定義了數據類,想使用它來訪問數據的時候,就可以使用解構聲明了。比如想要訪問前面定義的Test數據類中的參數,可以這么寫:

fun testData(){
    val test = Test(a = 10, b = "Zhujiang")
    val (a, b) = test
    Log.e(TAG, "testData: a=$a")
    Log.e(TAG, "testData: b=$b")
}

解構聲明使用起來非常方便,大家以后在Compose的編寫過程中如需使用數據類,就可以使用解構聲明來獲取數據。

主站蜘蛛池模板: 宜都市| 巴南区| 稷山县| 万全县| 石门县| 大埔县| 荃湾区| 霍林郭勒市| 白朗县| 昭苏县| 渭源县| 赤水市| 卢氏县| 长沙市| 大竹县| 恩施市| 灵宝市| 和林格尔县| 合肥市| 兴安盟| 建阳市| 鄂伦春自治旗| 怀仁县| 西宁市| 湄潭县| 龙游县| 河津市| 稷山县| 会东县| 舞钢市| 锦州市| 梧州市| 曲周县| 通城县| 石渠县| 石河子市| 灵宝市| 民丰县| 辽阳市| 崇文区| 于都县|