如何在Kotlin中仅用一个函数方法更改对象的不同属性?

x759pob2  于 2023-04-07  发布在  Kotlin
关注(0)|答案(1)|浏览(180)

我在compose中有3个textField用于name,age和gender,并使用uiState数据类来保存输入的状态:

data class UiState( 
         val nameInput: String = "", 
         val ageInput: String = "", 
         val genderInput: String = "", 
     )

为了更新状态,我使用以下函数作为onValueChanged函数(每个属性一个函数:姓名、年龄和性别):

fun updateNameInput(input: String) { 
         _uiState.update { it.copy(nameInput = input) } 
     } 
  
     fun updateAgeInput(input: String) { 
         _uiState.update { it.copy(ageInput = input) } 
     } 
  
     fun updateGenderInput(input: String) { 
         _uiState.update { it.copy(genderInput = input) } 
     }

现在我的问题是,我如何将这三个函数归结为一个,并在函数定义中传递参数(eighter nameInput,ageInput或genderInput)并仅更新该参数。
我希望能够只使用一个功能来更新这3个文本字段eighter。
先谢谢你了。

6tr1vspr

6tr1vspr1#

为了把它放在一个函数中,我想你可以把函数参数设置为可选的,并为非null的参数创建新的副本,然后你可以把null作为默认参数,让它们成为可选的。

fun updateNonNullInput(name: String? = null, age: String? = null, gender: String? = null) { 
     _uiState.update {
         var value = it
         if (name != null) value = value.copy(nameInput = name)
         if (age != null) value = value.copy(ageInput = age)
         if (gender != null) value = value.copy(genderInput = gender)
         value
     }
 }

相关问题