개발/Swift
Rxswift combineLatest 에러 The compiler is unable to type-check this expression in reasonable time
덤벨로퍼
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
}