我有这堂课:
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的第二次调用有效。谁能帮忙吗?
使用这样的主要构造函数和参数创建类:
class MyViewModel @Inject constructor(repository: MyRepository): ViewModel () { ... }
导致repository
参数不是property的事实,这意味着它不能在该类的其他函数中使用。但是它可以在类主体中声明的初始化器块和属性初始化器中使用:
class MyViewModel(repo: MyRepository) {
val repository = repo
}
但是,Kotlin具有更简洁的语法,可以使用val
或var
关键字从主构造函数中声明属性并对其进行初始化:
class MyViewModel @Inject constructor(val repository: MyRepository): ViewModel () { ... }
如果使用val
或var
关键字声明参数,它将被视为属性,并且可以在该类的其他函数中使用。