我看了一些Kotlin项目的示例代码,我发现很多作者都喜欢代码A。
我觉得代码B更简单。
1:代码B是好方法吗?
2:我可以在Android Studio中使用private set而不是private瓦尔吗?
代码A
private val _uiState = MutableStateFlow(InterestsUiState(loading = true))
val uiState: StateFlow<InterestsUiState> = _uiState.asStateFlow()
代码B
var uiState = MutableStateFlow(InterestsUiState(loading = true))
private set
2条答案
按热度按时间axzmvihb1#
A和B不是同一个代码。
在代码A中,将另一个变量定义为
StateFlow
,以防止在类外更改StateFlow
中的值。在代码B中,可以从类外更新
StateFlow
中的值,因为可以引用MutableStateFlow
。变异状态变量本身与
StateFlow
中的变异状态不同。当
StateFlow
中的值发生变化但StateFlow
本身发生变化时,观察StateFlow
的观察者收到事件。换句话说,您应该使用代码A来防止从外部发生意外变异
vhmi4jdf2#
我看过这个例子
但是我认为对于更好的封装来说最好的是这样,否认从单一真实来源(视图模型保持器和负责管理状态)之外改变useName的可能性