如何在ViewModel类Kotlin的函数内部使用存储库对象?

问题描述 投票:0回答:1

我有这堂课:

class MyViewModel @Inject constructor(repository: MyRepository): ViewModel () {
    lateinit var myLiveData: LiveData<User>

    fun signIn(credential: AuthCredential) {
        myLiveData = repository.signIn(credential)
    }

    val otherLiveData = repository.signOut() //Works fine
}

问题是repository无法在signIn函数内使用,我也不知道为什么。但是,对signOut的第二次调用有效。谁能帮忙吗?

android kotlin android-viewmodel
1个回答
0
投票

使用这样的主要构造函数和参数创建类:

class MyViewModel @Inject constructor(repository: MyRepository): ViewModel () { ... }

导致repository参数不是property的事实,这意味着它不能在该类的其他函数中使用。但是它可以在类主体中声明的初始化器块和属性初始化器中使用:

class MyViewModel(repo: MyRepository) {
    val repository = repo
}

但是,Kotlin具有更简洁的语法,可以使用valvar关键字从主构造函数中声明属性并对其进行初始化:

class MyViewModel @Inject constructor(val repository: MyRepository): ViewModel () { ... }

如果使用valvar关键字声明参数,它将被视为属性,并且可以在该类的其他函数中使用。

More info about constructors and parameters in Kotlin

© www.soinside.com 2019 - 2024. All rights reserved.