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属性的主要内容,如果未能解决你的问题,请参考以下文章

快速上手 Kotlin 开发系列之类型映射

使用带有 typealias 的协议作为属性

如何从片段 KOTLIN 中调用意图 [重复]

如何在 Kotlin 片段内的按钮之间切换片段?

kotlin-从一个片段更改多个片段的小数位

如何更改片段 Kotlin