RxSwift 4시간만에 끝내기(곰튀김님 강의 듣고 정리)
[ 1. ReactiveX 사이트 둘러보기 ]
[ 2. 비동기작업과 Observable ] [ 3. Disposable DisposeBag ]
1) Async
2) PromiseKit
3) RxSwift
이미지 다운로드와 동시에 숫자는 계속해서 올라감 (Async 한 작업)
Rx를 왜 쓰는가? Async 한 작업에 대한 코드를 간단하게 쓰기 위해서
코드 형태:
Observable 로 리턴.
onNext로 전달해서
subscribe 쪽으로 결과가 나옴.
이 때 아래를 참고하면 subscribe는 disposable 리턴
onCancel 쪽의 action: disposable?.dispose() 함으로써 취소
DisposeBag이란? dispose들을 담는 bag
disposeBag에 disposable들을 담아서 다 취소시킨다.
disposeBag.insert(disposable) 대신에
위에서부터 let disposable = 이렇게 변수로 받는거 귀찮으니깐 그냥 이거 지우고 .disposed(by: disposeBag) 이렇게 쓴다 주로
[ 4. 기본 Operators ]
just
just 뒤에 "Hello world"가 그대로 밑에 str 인자로 들어가서 print(str) 해서 나옴.
array 넣으면 그대로 또 나옴
from
from의 경우에는 array에 있는 요소들을 하나씩 떼어서 내려 보내줌
인자에 하나씩 하나씩 들어가네~
map
무언가를 받아서 바꿔치기 해서 내려보내준다
(위에서부터 순서대로 실행)
순서대로 죽 내려간다 (stream)
filter
true일 때만 내려보내주고 false일땐 버린다
최종 응용
: 이미지 800/600 짜리로 떨어지는 코드
[ 5. Operators 종류 ]
Observable 생성 - create , just, from
Observable 변환 - map
Observable 필터링 - filter
Observable 결합
오류 처리
...
[ 6. Marble Diagram 이해하기 ]
구슬: 데이터
화살표 : stream
짝대기: 데이터가 끝나는 지점 (complete). complete되면 disposable bag에서 사라진다.
가운데 연산자 (ex. Just) 통과하면 데이터 그대로 나옴
필터의 경우 stream이 있는 상태에서 스트림으로 내려옴
[ 7. Next / Error / Completed ]
-위의 마블 다이어그램에서 next: 화살표로 내려오는거
-error: X 표시
-completed: 짝대기
모든 여정을 거치고 난 data 를 최종으로 사용할 때 subscribe 를 쓴다
원래 다른 operator들은 return type 이 stream인데, (stream이라는건 observable이라는거임)
subscribe의 경우에만 다름. (return type이 disposable). 그래서 subscribe 끝나고 난 뒤에 disposable 처리해주어야 함.
위에서 next의 의미: 데이터가 전달됨
from 의 경우에는 subscribe이 4번 호출됨(next 가 4번) (위에 배열 안에 4개여서)
위에 형태 case 다 쓰기 싫은 경우 아래처럼 써도 됨.
dispose 되는 경우: error난 경우, complete 되는 경우., disposable 하는 경우
subscribe 쓸 수 있는 방법 3가지
1) 그냥 subscribe
2) event cases (switch) 로 쓰는 경우
3) 맨 마지막 사진처럼 커스텀
3)의 경우 이렇게 간단하게 쓸 수도 있다.
위 코드를 더 간결하게 쓰고 싶다면 아래처럼 클로저 부분의 함수를 따로 빼서 적어주면 됨.
[ 8. Scheduler ]
exMap3() 의 경우, 누르자마자 테이블뷰 스크롤 되는 동시에, 이미지를 띄우고 싶다면
위에있는 코드들 : 테이블뷰 스크롤 되게 concurrency쪽 (main thread가 아닌)에서 실행
아래 이미지 관련은 메인 쓰레드에서 실행되어야 함
따라서 observeOn 으로 scheduler를 걸어준다
observeOn은 쓴 다음줄부터 영향을 미치는것임.
.subscribeOn의 경우는 .subscribe 거치는 순간부터 다 적용됨
즉 Observable.just("800x600") 부터 쭉 적용됨
subscribeOn은 observeOn이 이거 쓴 다음줄부터 영향 미치는것과는 다르게 쓰는순간부터 영향을 미침.
side effect: 바깥에 영향을 미치는거
위 코드에서
self.imageView.image = image는 해당 파일의 맨 위에 image 정의한 데에 영향을 미치니깐 바깥에 영향을 미치는거.
즉, side effect 바깥에 영향을 미치는건 2가지
1) .subscribe
2) .do
외부에 뭔가 영향을 미쳐야한다?? do 또는 subscribe !!
[ 9. RxSwift 응용해보기 ]
RxCocoa : RxSwift 의 extension 느낌
ID, PW 검증 후 로그인 버튼 활성화
데이터 비동기처리
UI에 대한 이벤트도 그렇게 처리할 수 있음
[ 10. Subject ]
observable과 observer 를 연결하는 pipe 같은 개념
https://www.youtube.com/watch?v=iHKBNYMWd5I&list=PL03rJBlpwTaBrhux_C8RmtWDI_kZSLvdQ
시즌 2 는 위 영상 참고...
'iOS > RxSwift' 카테고리의 다른 글
RxSwift 간단 핵심 정리 (0) | 2023.02.18 |
---|---|
RxSwift Operator) CombineLatest (0) | 2023.02.15 |
RxSwift 제일 간단한 테이블뷰 만들기 (0) | 2023.02.14 |
RxSwift) RxCocoa 로 TableView Delegate 처리 (0) | 2023.01.13 |
RxSwift 4시간만에 끝내기(곰튀김님 강의 듣고 정리) [시즌2] (0) | 2023.01.12 |