Kotlin内联函数,用于检查用户是否经过身份验证?

f0brbegy  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(122)

我想在检查用户是否通过身份验证后执行一个代码块。

inline fun <T : Any, R> T?.isUserAuthenticated(callback: (T) -> R) {
    FirebaseAuth.getInstance().currentUser?.let {
        //Function call
    } ?: kotlin.run {
        FirebaseAuth.getInstance().signInAnonymously().addOnSuccessListener { 
            //Function call
        }
    }

这种方法不起作用,但有没有其他选择呢?

l0oc07j2

l0oc07j21#

在以下情况下,Kotlin中的内联函数应优先于常规函数使用:

  • 您迫切需要更有效地分配内存。
  • 当函数接受另一个函数或lambda作为参数时。
  • 您需要防止对象创建并具有更好的控制流。

否则,内联may cause the generated code to grow。很可能还有其他情况值得使用内联函数,但我只添加了其中的几个(重要的)函数。
在检查用户是否通过身份验证时,我宁愿创建一个如下所示的常规函数:

fun getAuthState() = auth.currentUser != null

并使用它:

val isAuthenticated = getAuthState()
if(!isAuthenticated) {
    auth.signInAnonymously().addOnCompleteListener(/*...*/)
}

或者,如果使用Kotlin协程:

if(!isAuthenticated) {
    auth.signInAnonymously().await()
}

所以这是一个方法或其他。
我会将这个函数添加到一个存储库类中,这样它就可以在整个项目中使用。
如果您有兴趣查看一些代码,我建议您查看以下资源:

这是对应的repo

相关问题