如何在 ViewModel class Kotlin 的函数内使用存储库对象?
How to use a repository object inside a function in a ViewModel class Kotlin?
我有这个class:
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:
class MyViewModel @Inject constructor(repository: MyRepository): ViewModel () { ... }
导致repository
参数不是属性,也就是说不能在[=的其他函数中使用31=]。但它可以用在初始化程序块和 属性 初始化程序中,声明在 class 主体中:
class MyViewModel(repo: MyRepository) {
val repository = repo
}
但是,Kotlin 使用 val
或 var
关键字声明属性并从主构造函数初始化它们的语法更简洁:
class MyViewModel @Inject constructor(val repository: MyRepository): ViewModel () { ... }
如果您使用 val
或 var
关键字声明参数,它将被视为 属性 并在 class 的其他函数中可用。
我有这个class:
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:
class MyViewModel @Inject constructor(repository: MyRepository): ViewModel () { ... }
导致repository
参数不是属性,也就是说不能在[=的其他函数中使用31=]。但它可以用在初始化程序块和 属性 初始化程序中,声明在 class 主体中:
class MyViewModel(repo: MyRepository) {
val repository = repo
}
但是,Kotlin 使用 val
或 var
关键字声明属性并从主构造函数初始化它们的语法更简洁:
class MyViewModel @Inject constructor(val repository: MyRepository): ViewModel () { ... }
如果您使用 val
或 var
关键字声明参数,它将被视为 属性 并在 class 的其他函数中可用。