작성
·
201
0
확장함수 만드실때 두 번째 인자로 collect: suspend(T) -> Unit 이 분이 잘 이해가 안됩니다. collect해야될 요소 즉 T 타입이 들어가야 되는건 알겠는데 왜 람다가 쓰이는 건가요?
답변 1
1
fun <T> FavoriteFragment.collectLatestStateFlow(flow: Flow<T>, collect: suspend (T) -> Unit) {
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
flow.collectLatest(collect)
}
}
}
이 코드에서 `collectLatestStateFlow` 함수는 파라미터로 `flow`와 `collect`를 받습니다. `flow`는 UI에 표시할 `Flow` 형 데이터로 `bookSearchViewModel.favoriteBooks`이고, `collect`는 그 데이터를 표시하는데 쓰일 함수로 `bookSearchAdapter.submitList`가 됩니다.
`collectLatestStateFlow` 함수의 파라미터로 `collect: suspend (T) -> Unit`라는 람다식을 사용하면, 파라미터가 없는 suspend 함수를 받아서 작업을 수행하고 아무것도 반환하지 않는 함수를 `collect`라는 이름의 파라미터로 전달하겠다는 뜻이 됩니다. `bookSearchAdapter.submitList`가 그러한 `collect` 역할을 하는 함수로 전달되는 것이지요.
혹시 collectLatest가 아닌 collect로 사용하고 싶으시면 다음 링크를 참고하시면 됩니다.
https://stackoverflow.com/a/71603790
감사합니다!!