티스토리 뷰

이 포스팅은 'RxSwift 4시간 만에 끝내기'라는 유튜브 강의를 보고 하는 개념 정리입니다.

ref : https://www.youtube.com/watch?v=iHKBNYMWd5I&t=1965s

 

비동기 처리

비동기적인 데이터를 전달, 처리할 때는 주로 @escaping 클로저의 completion를 주로 사용합니다.

하지만, 이런 방식은 코드가 복잡하여 코드를 이해하기 어려울 수 있어 관리, 수정에 용이하지 않습니다.

 

RxSwift의 용도

RxSwift는 비동기 처리 코드를 동기적으로 처리하는 것과 같이(순차적으로) 코드를 작성할 수 있습니다.

즉, 비동기 처리 코드를 좀 더 가독성 있고 직관적으로 작성할 수 있습니다.

 

Observable

-  Observable <T>는, T 형태의 데이터를 전달할 수 있는 일련의 이벤트를 비동기적으로 생성하는 기능입니다.

-  쉽게 말하면 나중에 생기는 데이터를 처리할 것이라고 명시 후, 데이터가 들어왔을 때 비동기적으로 처리하는 방식입니다.

-  Observable은 3가지 이벤트 중 하나만 전달합니다.

  • next: 데이터와 함께 next 이벤트를 전달
  • completed: Observable이 성공적으로 종료될 때, completed 이벤트를 전달
  • error: Observable에서 에러가 발생했을 때, error 이벤트를 전달

 

1) 비동기로 생기는 데이터를 Observable로 전달 예시 코드

func download(_key : String) -> Observable <String?> {

return Observable.create() { emitter in
    
    emitter.onNext("Hello")
    
    emitter.onCompleted()
    
    return Disposables.create()
    
    }
    
}

-  Observable 데이터를 생성할 땐 create()를 사용합니다.

-  onNext를 통해 next 이벤트와, 안의 data를 전달합니다.

-  onCompleted를 통해 completed 이벤트가 전달되고 Observable이 종료됩니다.

-  Disposable은 Observable 구독(subscribe)을 취소할 때 dispose()를 통해 사용됩니다.

 

 

2) Observable로 오는 데이터를 받아서 처리 예시 코드 - 1

    download(key)
    
    .subscribe { event in
    
    switch event {
    
    case .next (let data):
    
    	print(data)
        
    case .completed:
    
    	break
        
    case .error:
    
    	break
        
    }
}

-  subscribe를 통해 Observable에서 전달되는 event를 클로저 인자로 받습니다.

-  Observable은 subscribe 호출 전까진 아무 짓도 하지 않습니다.

-  다음 코드는 switch문으로 받았고, next, completed, error로 나누어 받습니다.

-  출력 결과는 "Hello"가 될 것입니다. 

3) Observable로 오는 데이터를 받아서 처리 예시 코드 - 2

    download(key)
    
    .subscribe(
    
    onNext: { data in
    
        print(data)
        
    },
    
    onError: { error in 
    
        break
        
    },
    
    onCompleted: {
    
        break
        
    })

- 다음과 같은 방법으로도 이벤트를 나누어 data를 받을 수 있습니다.

 

Observable의 생명 주기

1. Create 생성

2. Subscribe 받기, 구독

3. onNext 전달

4. onCompleted / onError  종료

5. Disposable 재사용 x or 중간에 취소

 

 

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함