RxKotlin combineLatest
RxKotlin combineLatest
집에 와서 안드로이드 단톡방 쭉쭉 보다가 어떤 분이 질문 올린 글을 봤다.
Rx 공부 해야지 해야지 생각 하다가 안하고 있었는데 마침 문제가 하나 생김 ㅎㅎ
문제는 RxKotlin 을 사용해서 입력창 세가지가 있는데 각각 입력창에서 입력 할 때마다 validation 체크를 하고 다 통과 되면 버튼을 활성화 시키고 싶다.
키워드는 combineLatest 이다. 아래의 TestCode 를 보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class CombineLatestTest {
@Test
fun test() {
var isValid = false
val emailSubject = BehaviorSubject.create<String>()
val passwordSubject = BehaviorSubject.create<String>()
val nickNameSubject = BehaviorSubject.create<String>()
BehaviorSubject.combineLatest<String, String, String, Boolean>(
emailSubject,
passwordSubject,
nickNameSubject,
Function3<String, String, String, Boolean> { email, password, nickname ->
return@Function3 email.isNotEmpty() && password.isNotEmpty() && nickname.isNotEmpty()
}
).subscribe { result ->
isValid = result
println("활성화 여부 $isValid")
}
emailSubject.onNext("이메일 입력")
assertEquals(isValid, false)
passwordSubject.onNext("패스워드 입력")
assertEquals(isValid, false)
nickNameSubject.onNext("닉네임 입력")
assertEquals(isValid, true)
passwordSubject.onNext("") //패스워드 제거
assertEquals(isValid, false)
passwordSubject.onNext("패스워드 입력") //패스워드 다시 입력
assertEquals(isValid, true)
}
}
결과는
활성화 여부 false
활성화 여부 false
활성화 여부 true
활성화 여부 false
활성화 여부 true
combineLatest 은 파라미터로 ObservableSource 를 받고 마지막에 리턴할 Function 을 받는다.
ObservableSource 갯수 제한은 9개 까지로 확인했다.
테스트 코드라서 isNotEmpty 로 처리 해뒀는데 저기 부분이 isValid 로 변경 되면 되겠다~
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.