인프런 커뮤니티 질문&답변

jminie님의 프로필 이미지
jminie

작성한 질문수

냉동코더의 알기 쉬운 Modern Android Development 입문

Practice6-Room 응답을 flow로 변환하기 (Flow, StateFlow, Extension functions)

확장함수에서 질문입니다!

작성

·

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

jminie님의 프로필 이미지
jminie
질문자

감사합니다!!

jminie님의 프로필 이미지
jminie

작성한 질문수

질문하기