[안드로이드 공부]/코틀린

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

코코모아 2020. 8. 7. 17:54

아래는 코모스튜디오가 직접 만든 무료 앱이에요
(한 번만 봐주세요 ^^)

01

02

03

정각알림 만들기(말하는시계)

말하는 시계 (취침, 자전거) 

말하는 타이머 음성 스톱워치 

변경될 수 있는(mutable/var) 타입을 캐스팅 할 경우 문제가 생긴다.

이 경우에는 val 불변 타입으로 새로운 변수에 할당 한 뒤에 캐스팅을 해야 한다.

private val plantDetailViewModel: PlantDetailViewModel by viewModels {
   InjectorUtils.providePlantDetailViewModelFactory(requireActivity(), args.plantId)
}

val binding = DataBindingUtil.inflate<FragmentPlantDetailBinding>(
                inflater, R.layout.fragment_plant_detail, container, false
  ).apply {
      viewModel = plantDetailViewModel
           
      //error beacuse viewModel is defined xml
      viewModel.plant.value?.let{}
            
      //no error val type
      plantDetailViewModel.plant.value?.let{}
      
      //no error
      val vm = plantDetailViewModel
      vm.plant.value?.let{}

viewModel.plant.value?. 에러가 발생했는데, 이 viewModel은 xml에 아래와 같이 정의 되어있기 때문이다.

<variable
   name="viewModel"
모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다.
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요.