Observable


まず、Observableの前にmableチャートを説明したいと思います.
Rxを勉強すると、以下の画像がよく見られます.
  • の上には、行が新しく入力され、左から右に流れます.
  • の最後のパリティペアは、ストリームがこれ以上低下しないことを意味する.
  • の間でboxは、入力値を計算する演算子である.
  • の一番下の行は、演算によって得られた値を表します.
  • 以降のデータ


    実際には観測できないか、理解しやすいように、「後からあるデータ」を例に挙げます.
    class 나중에생기는데이터<T> {
      private let task: (@escaping (T) -> Void) -> Void
    
      init(task: @escaping (@escaping (T) -> Void) -> Void) { 
        self.task = task
    }
    
      func 나중에오면(_ f: @escaping (T) -> Void) {
        task(f)
      }
    }
    
    func downloadSomething() -> 나중에생기는데이터<String?> {
      //생성 시점에 비동기 코드를 넣어준다.
      return 나중에생기는데이터() { f in
        //비동기처리
        //나중에 왔다는 가정
        f()
      }
    }
    
    func load() {
      let data = downloadSomething()
      data.나중에오면 { json in
    			//ui 처리등
      }
    }
    以上、Rxのコアコンテンツです.
    これはRxコンテンツの全てだと思います.
    単純に「後からあるデータ」を「観測可能」に変えて考えれば理解できる.
    上記の内容を実際の観測性として実現しましょう.
    func downloadSomething() -> Observable<String?> {
      return Observable.create() { emitter in
      //비동기처리
      비동기 { response in
          emitter.onNext(data)
          emitter.error("")
          emitter.complete()
          //Disposable을 리턴하게 되는데,
          //아래에서 한번 더 정리해보겠다.
          return Disposable.create()
          } 
        }
    }
    
    func load() {
      //위의 예시에선 바로 데이터를 내려주었지만 
      //실제 Observable은 event라는 녀석을 내려준다.
      //그곳에 내려오는 데이터 / 에러 / 더이상 내려오지 않는 컴플릿까지 상태를 내려올 수가 있다.
      let _ = downloadSomething().subscribe { event in
    	switch event {
    	case let .next(json):
        //내려오는 값
    	case .completed:
    	break
    	case .error:
    	break
    	}
        }
    }

    Disposable


    単語を訳すと「処理可能」です.
    こいつが購読しなくなったとき、購読をやめたいときに使います.
    やらないとメモリがあります.
    実際には、ViewControllerがシャットダウンまたはシャットダウンした場合に、この処理を行うことが最も多く使用される場合があります.
    次に、処理の例を示します.
    import RxSwift
    
    class SomeViewController: UIViewController {
    //이 DisposeBag은 Disposable들을 담을 수 있는 클래스이다.
    //해당 클래스가 메모리에서 해제되면 가방안에 있는 모든 Disposable들도 같이 해제된다.		
        let disposeBag = DisposeBag()
        override func viewDidLoad() {
    	super.viewDidLoad()
        
            Observable.of("A", "B", "C")
            	.subscribe {
                		print($0)
                    }
    		.disposed(by: disposeBag)
    		//위의코드로 Disposeable을 담아둔다.
    		}
         }
    
    }