iOS/RxSwift

RxSwift 4시간만에 끝내기(곰튀김님 강의 듣고 정리) [시즌0]

Developer-Michelle 2023. 1. 9. 14:36

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 는 위 영상 참고...