Kotlin typealias属性
Posted aikongmeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin typealias属性相关的知识,希望对你有一定的参考价值。
中文文档解释:
类型别名为现有类型提供替代名称。 如果类型名称太长,你可以另外引入较短的名称,并使用新的名称替代原类型名。
它有助于缩短较长的泛型类型。
https://www.kotlincn.net/docs/reference/type-aliases.html
可以为函数类型提供另外的别名:
typealias MyHandler = (Int, String, Any) -> Unit
typealias Predicate<T> = (T) -> Boolean
上边是文档举例,并不能引起重视 , 下面来实际中举例
把集合声明一个别名,缩短泛型类名
typealias CalendarWeek = List<CalendarDay>
传递的时候,见名知意
@Composable
private fun Week(
modifier: Modifier = Modifier,
month: CalendarMonth,
week: CalendarWeek,
onDayClicked: (CalendarDay) -> Unit
)
使用时代码片如下
for (day in week) {
Day(
day,
onDayClicked,
month
)
}
@Composable
private fun getLeftRightWeekColors(week: CalendarWeek, month: CalendarMonth): Pair<Color, Color> {
val materialColors = MaterialTheme.colors
val firstDayOfTheWeek = week[0].value
val leftFillColor = if (firstDayOfTheWeek.isNotEmpty()) {
val lastDayPreviousWeek = month.getPreviousDay(firstDayOfTheWeek.toInt())
if (lastDayPreviousWeek?.status?.isMarked() == true && week[0].status.isMarked()) {
materialColors.secondary
} else {
Color.Transparent
}
} else {
Color.Transparent
}
...
还可以把点击事件typealias
typealias OnExploreItemClicked = (ExploreModel) -> Unit
然后就可以方便的传递这个事件
data class SleepSearchContentUpdates(
val onPeopleChanged: (Int) -> Unit,
val onDateSelectionClicked: () -> Unit,
val onExploreItemClicked: OnExploreItemClicked
)
MainScreen(
onExploreItemClicked = { launchDetailsActivity(context = this, item = it) },
onDateSelectionClicked = { launchCalendarActivity(this) } )
对于较长的名字如下,
typealias AVD = AnimatedVectorDrawable
不过有更加合适的声明
import android.graphics.drawable.AnimatedVectorDrawable as AVD
总结:
类型别名不会引入新类型,只是换了个更简洁或更具意义的名称
typealias CalendarWeek = List<CalendarDay>
...
fun Week(week: CalendarWeek){...}
相当于
public static final void Week(@NotNull List week) {...}
以上是关于Kotlin typealias属性的主要内容,如果未能解决你的问题,请参考以下文章