Kotlin进阶学习
函数参数默认值
1 | fun printParams(num: Int, str: String = "hello") { |
我们为第二个参数设定了一个默认值,这样即使我们不传第二个参数,也会有默认值。但如果我们设定的默认值在前面,仍不传的话就会报错。比如:
1 | fun printParams(str: String = "hello", num: Int) { |
但是Kotlin支持键值对的形式传参,就很好的避免了上述问题:
1 | printParams(num = 100) |
扩展函数
语法结构
1 | fun ClassName.methodName(paran1: Int, param2: Int): Int { |
用法
比如我们想为String
类加一个.lettersCount
功能,用于统计字符串中的字母数量。我们可以新建一个String.kt
文件用于分类。然后写以下代码:
1 | fun String.lettersCount(): Int { |
我们就将lettersCount
定义为了String
的扩展函数,并拥有了String
实例的上下文。然后我们使用时只需要:
1 | val count = "ABC123xyz!@#".lettersCount() |
这样就可以让API变得十分简洁,像字符串自带了这样一个方法一样。
高阶函数应用
可以用来简化SharedPreference的用法,我们提交数据的例子如下:
1 | val editor = getSharedPreference("data", Context.MODE_PRIVATE).edit() |
我们可以用高阶函数来进行一定程度上的简化,新建一个SharedPreferences.kt
:
1 | fun SharedPreferences.open(block: SharedPreferences.Editor.() -> Unit) { |
我们先添加了SharedPreferences
的一个open
扩展函数,其中接受一个函数类型的参数,其中open函数接收的是SharedPreferences.Editor
的函数类型参数,这里就需要调用editor.block()
进行调用。然后我们储存数据时就可以更简单了:
1 | getSharedPreference("data", Context.MODE_PRIVATE).open { |
这个lambda表达式是有SharedPreferences.Editor
的上下文的,可以直接提交。
然后在Google的KTX库中已经支持了上述简化用法:
1 | getSharedPreference("data", Context.MODE_PRIVATE).edit { |
评论