웰코발
웰코's iOS
웰코발
전체 방문자
오늘
어제
  • 분류 전체보기 (63)
    • Swift (26)
    • rxSwift (13)
    • SwiftUI (3)
    • iOS (12)
    • 기타 (1)
    • 개발관련 용어정리 (6)
    • 면접준비 (0)
    • 공공데이터 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • delay
  • swiftUI
  • cell
  • 대기오염통계 현황
  • Observable
  • rxswift
  • WKWebView
  • collectionview
  • SWIFT
  • Coordinator
  • Scroll
  • uitableview
  • content_available
  • 주제구독
  • ReactorKit
  • 측정소정보
  • UI
  • alamofire
  • 디자인
  • ios

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
웰코발

웰코's iOS

[rxSwift] rxSwift의 심장, Observable 이란
rxSwift

[rxSwift] rxSwift의 심장, Observable 이란

2022. 10. 18. 22:02

Observable<T>

  • T형태(Type)의 데이터 snapshot을 '전달'할 수 있는 일련의 이벤트를 비동기적(asynchronous)으로 생성하는 기능
  • Observable = Observable Sequence = Sequence
  • 다른 클래스에서 만든 값을 시간에 따라서 읽을 수가 있다
  • 하나 이상의 observer가 실시간으로 어떤 이벤트에 반응, 세 가지 유형의 이벤트만 방출 (next, error, completed)
  • Observable들은 일정 기간 동안 계속해서 이벤트를 생성(emit)
  • next라는 이벤트는 T에 해당하는 형태(Type)의 Element를 전달함, 클로저로 Element를 다룰 수 있음.
  • completed는 성공적으로 일련의 이벤트들을 종료시키는 것, Observable은 종료됨
  • error는 Swift에러를 감싸서 내뱉게 되는데, Observable이 에러를 발생시켜 추가적으로 이벤트를 생성하지 않을 것을 의미, 에러와 함께 Observable은 종료됨
  • tap과 같은 제스처도 element로 사용 가능 (rxCocoa의 기능과 함께 사용가능)
  • Observable 생명주기
    • Observable은 어떤 구성요소(elemnet)를 가지는 next이벤트를 계속해서 방출할 수 있음
    • Observable은 error이벤트를 방출하여 완전 종료될 수 있음
    • Observable은 complete 이벤트를 방출하여 완전 종료 될 수 있음

next 이벤트를 통해 각각의 요소들을 방출.

 

세 번의 tap 이벤트를 방출한 뒤 이벤트들이 다 방출되면 완전 종료.즉 completed이벤트가 발생.

 

1, 2를 방출하고 에러가 발생해 error를 방출 후 종료.

 

 

  • .next 이벤트는 어떠한 Element 인스턴스를 가지고 있는 것을 확인할 수 있다.
  • .error 이벤트는 Swift.Error 인스턴스를 가진다.
  • .completed 이벤트는 아무런 인스턴스를 가지지 않고 단순히 이벤트를 종료시킨다.
public enum Event<Element> {
  /// Next elemet is produced.
  case next(Element)
 	
  /// Sequence terminated with an error.
  case error(Swift.Error)
 	
  /// Sequence completed successfully.
  case completed
 }

 

  • 사용 예시
let observable = Observable<Int>.just(1) // 오로지 1(Int 타입)만을 방출

observable.subscribe(
    onNext: { data in
    	print(data) 		 // 1 
    },
    onError: { error in 
    	print(error)		 // error 시 error코드 방출 후 종료
    },
    onCompleted: { 
    	print("completed")    // 성공적으로 완료되면 무엇도 방출하지 않고 종료
    },
    onDisposed: { 
    	print("dispose done") // 종료 후 disposed
    }
)
//위 코드와 같은 맥락의 코드
let observable = Observable<Int>.just(1)

observable.subscribe { event in
    switch event {
    case .next(let value):
      	print(value)
    case .error(let error):
      	print(error)
    case .completed:
      	print("completed")
    }
}
.disposed(by: self.disposeBag)

 

'rxSwift' 카테고리의 다른 글

[rxSwift] Observable create 하는 법  (0) 2022.10.20
[rxSwift] Observable subscribe 하는 법  (0) 2022.10.19
[rxSwift] 기본적인 Observable 의 종류  (0) 2022.10.19
[rxSwift] Observable 에 대한 이해  (0) 2022.10.18
rxSwift의 장단점  (0) 2022.10.17
    'rxSwift' 카테고리의 다른 글
    • [rxSwift] Observable subscribe 하는 법
    • [rxSwift] 기본적인 Observable 의 종류
    • [rxSwift] Observable 에 대한 이해
    • rxSwift의 장단점
    웰코발
    웰코발
    나의 개발 일지

    티스토리툴바