kotlin 14

Unresolved reference: copy

_uiState.update { state -> when (state) { is UiState.Success -> { UiState.Success( data = state.data.copy( newlyAddedId = event.addedId ) ) } else -> state }}이 코드에서 발생하는 오류는 UiState.Success의 data 필드가 UiData 타입이지만, copy 함수를 호출하려고 하고 있습니다. UiData는 인터페이스이므로 copy 함수가 없습니다. copy 함수는 코틀린의 data 클래스..

Incompatible types: UiState.Loading and State<UiState<UiData<Any>>>

Incompatible types: UiState.Loading and State>>  문제 발생 코드val uiState: State>> = viewModel.uiState.collectAsStateWithLifecycle()when (uiState) { is UiState.Loading -> { 원인과 해결 Incompatible types: UiState.Loading and State>> 오류는 uiState 변수의 타입이 State>>가 아니라 UiState.Loading이기 때문에 발생합니다. 1. uiState 변수의 타입을 State>>으로 변경합니다.val uiState: State>> = viewModel.uiState.collectAsStateWithLifecycle() 2. w..

Group(selectedGroupId = null Vs -1)

selectedGroupId 변수는 현재 선택된 그룹을 나타내는데 사용됩니다. 이 변수의 값이 null인 경우 선택된 그룹이 없음을 나타내는 것이 일반적입니다.-1을 사용하는 것은 특정한 상황에서 유효한 그룹 ID가 없음을 나타내는 방법일 수 있지만, 이는 코드를 읽는 사람에게 혼란을 줄 수 있습니다.   따라서, null을 사용하여 "선택된 그룹이 없음"을 나타내는 것이 더 명확하고 일반적인 방법입니다. 이렇게 하면 selectedGroupId 변수의 타입을 nullable Group?으로 선언할 수 있으며, 이 변수가 null인지 아닌지를 확인함으로써 선택된 그룹의 존재 여부를 쉽게 판단할 수 있습니다.

Kotlin by VS .value collectAsStateWithLifecycle

val groupsUiState by viewModel.groupsUiState.collectAsStateWithLifecycle() val groupsUiState = viewModel.groupsUiState.collectAsStateWithLifecycle().value 두 코드는 Kotlin의 by 키워드를 사용하는 방식과 직접 .value를 호출하는 방식의 차이를 보여줍니다.   val groupsUiState by viewModel.groupsUiState.collectAsStateWithLifecycle() 이 코드는 Kotlin의 위임 프로퍼티(delegated property)를 사용합니다. by 키워드를 사용하면 groupsUiState의 값은 viewModel.groupsUiState..

MutableStateFlow .update VS .value = 차이점

private val _uiState = MutableStateFlow(UiState.Loading)_uiState.update { when (state) {VS_uiState.value = state 두 방법 모두 MutableStateFlow의 값을 업데이트하는 방법이지만, 사용 상황에 따라 적합한 방법이 다르다._uiState.update { }: 이 방법은 현재 MutableStateFlow의 값에 기반하여 새 값을 계산할 때 유용하다. 이 함수는 현재 값을 인자로 받는 람다 함수를 사용하며, 람다 함수의 반환 값이 새로운 값으로 설정됨.  _uiState.value = state: 이 방법은 새 값이 현재 값에 의존하지 않을 때 사용한다. 이 방법은 단순히 MutableStateFlow의 ..

Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option

Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option viewModel 에 param을 추가하였더니 viewModel Factory가 필요하고, 추가 하니 위와 같은 에러가 나왔다~ 버전 충돌 문제인데~ build.gradle.app 에 kotlinOptions { jvmTarget = '1.8' freeCompilerArgs += [ '-Xjvm-default=enable' ] } 또는 tasks.withType(KotlinCompile).configureEach { kotlinOptions { freeCompilerArgs += [ "-Xjvm-default=all", ] } }..

smart cast to is impossible because is a mutable property that could have been changed by this time

변경될 수 있는(mutable/var) 타입을 캐스팅 할 경우 문제가 생긴다. 이 경우에는 val 불변 타입으로 새로운 변수에 할당 한 뒤에 캐스팅을 해야 한다. private val plantDetailViewModel: PlantDetailViewModel by viewModels { InjectorUtils.providePlantDetailViewModelFactory(requireActivity(), args.plantId) } val binding = DataBindingUtil.inflate( inflater, R.layout.fragment_plant_detail, container, false ).apply { viewModel = plantDetailViewModel //error bea..

반응형