ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Rxswift combineLatest 에러 The compiler is unable to type-check this expression in reasonable time
    개발/Swift 2023. 7. 1. 13:47
    반응형
    The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
    

    Rx - combine latest 에 9개 이상의 observable을 넣었더니 에러가 발생

    CombineLatest를 쓸떄 8개까지만 쓸수가 있다

    이를 해결하기위해 여러 더많은 Observable을 쓰려면

    combine 을 하고 그거를 가지고 combine 해줘야한다.

    let searchCombinedObservable = Observable.combineLatest(searchKeyword.asObservable(),
                                                            eFriendList.asObservable(),
                                                            eFriendsPageFinished.asObservable())
    
    combine = Observable.combineLatest(aFriendList.asObservable(),
                                            aFriendExpand.asObservable(),
                                            bFriendList.asObservable(),
                                            cFriendList.asObservable(),
                                            dFriendsPageFinished.asObservable(),
                                            showOnlyFamily.asObservable(),
                                            searchCombinedObservable)

    이렇게 묶어버리면 된다.

     

    문제는 map 으로 떨어진 데이터가 튜플 형태로 떨어지기 때문에

    0 , 1, 2 로 접근이 가능하다.

    let searchCombinedObservable = Observable.combineLatest(searchKeyword.asObservable(),
                                                            eFriendList.asObservable(),
                                                            eFriendsPageFinished.asObservable())
    
    combine = Observable.combineLatest(aFriendList.asObservable(),
                                            aFriendExpand.asObservable(),
                                            bFriendList.asObservable(),
                                            cFriendList.asObservable(),
                                            dFriendsPageFinished.asObservable(),
                                            showOnlyFamily.asObservable(),
                                            searchCombinedObservable)
                                            
            .map { aFriendList, aFriendExpand, bFriendList,
                cFriendList, cFriendsPageFinished, showOnlyFamily, searchCombine in
                searchCombine.0
                searchCombine.1
                searchCombine.2 //이렇게 접근해야해서 가독성이 좋지 않음
    
            }

    그랬을떄 가독성이 좋지 않으므로 combine 된 튜플을 네이밍 해주면 좋다.

    let searchCombinedObservable = Observable.combineLatest(searchKeyword.asObservable(),
                                                            eFriendList.asObservable(),
                                                            eFriendsPageFinished.asObservable())
    
    combine = Observable.combineLatest(aFriendList.asObservable(),
                                            aFriendExpand.asObservable(),
                                            bFriendList.asObservable(),
                                            cFriendList.asObservable(),
                                            dFriendsPageFinished.asObservable(),
                                            showOnlyFamily.asObservable(),
                                            searchCombinedObservable)
                                            
            .map { aFriendList, aFriendExpand, bFriendList,
                cFriendList, cFriendsPageFinished, showOnlyFamily, searchCombine in
                let (searchKeyword, eFriendList, eFriendsPageFinished) = searchCombine
    
                searchKeyword
                eFriendList
                eFriendsPageFinished 
    
            }
    반응형

    댓글

Designed by Tistory.