如何在Kotlin中为关于上下文的getInteger做一个扩展函数?

时间:2018-04-02 07:02:17

标签: android kotlin

我是Kotlin的初学者,代码A从资源文件中获取一个int值。

我希望使用扩展函数来执行此操作,并像this.getInteger(R.integer.ActivityEditBackup)

一样调用它

但我做的代码B不正确,我该如何解决?

代码A

mContext.resources.getInteger(R.integer.ActivityEditBackup)) 

代码B

inline fun <reified T : Activity>Context.getInteger(int id): int {
    return T.resources.getInteger(id)
}

1 个答案:

答案 0 :(得分:3)

你有点过分复杂了。

  • 您不会以任何方式使用特定类型的Context,也不需要将扩展​​程序设为通用。
  • 在参数列表中,参数名称首先出现,后面是类型。
  • Kotlin中的整数类型名称为Int,首字母为I
  • 您可以使用Context
  • 参与扩展功能中的this
  • 您可以使用支持注释来指定您的参数始终是整数资源ID。

总的来说,有了这些变化:

inline fun Context.getInteger(@IntegerRes id: Int): Int {
    return this.resources.getInteger(id)
}

关于语法也存在一些普遍的混淆,你应该查看functions然后extensions的文档。

此外,您可以将函数转换为表达式主体,并省略显式this

inline fun Context.getInteger(@IntegerRes id: Int) = resources.getInteger(id)