[TIL] 2021.05.31

승아·2021년 5월 31일
0
post-custom-banner

👩🏻‍💻 오늘 공부한 내용

Result of call to ... is unused

// loadTM 함수는 Observable<TM>을 반환함.
func loadTM(lat: Double, lng: Double) -> Observable<TM>{

이 경고는 말그대로 어쩌구의 result가 사용되지 않았다. 즉, 저 함수가 Return 값이 있는데 왜 변수 정의를 안해줬니..?

해결방안

_ = loadTM(lat: lat, lng: lng)
    .flatMap{ tm in self.loadStation(tmX: tm.tmX, tmY: tm.tmY)}
    .flatMap{ station in self.loadFineDust(stationName: station)}
    .bind(to: observable)

_ 를 활용하면 해결 완.

Relay

var relay = PublishRelay<Int>()
// Observable이기도 하기 때문에 항목들을 하나 하나 거치면서 재배출하고 관찰하며 새로운 항목들을 배출할 수도 있다.
relay.subscribe(onNext:{
    print("들어온 값 : \($0)")
})

var k = relay.map{
    $0 / 2
}

k.subscribe(onNext:{
    print("k .. : \($0)")
})

// 옵저버이기 때문에 하나 이상의 Observable을 구독할 수 있다.
Observable.range(start: 2, count: 9)
    // .bind(to: relay) // 밑에 subscribe 코드를 간단하게
    .subscribe(onNext:{
        relay.accept($0)
    })

Observable.from([1,1,1,1,1])
    .bind(to: relay)
    
** 출력 **

들어온 값 : 2
k .. : 1
들어온 값 : 3
k .. : 1
들어온 값 : 4
k .. : 2
들어온 값 : 5
k .. : 2
들어온 값 : 6
k .. : 3
들어온 값 : 7
k .. : 3
들어온 값 : 8
k .. : 4
들어온 값 : 9
k .. : 4
들어온 값 : 10
k .. : 5
들어온 값 : 1
k .. : 0
들어온 값 : 1
k .. : 0
들어온 값 : 1
k .. : 0
들어온 값 : 1
k .. : 0
들어온 값 : 1
k .. : 0

RxCoCoa Traits

Traits

  • UI처리에 특화된 Observable (MainThread에서 실행, Error이벤트가 없음)
  • Control Property, Control Event, Driver, Signal이 있음.

Driver

asDriver를 사용하여 error가 나면 대응할 방법을 미리 정해둠.

.asDriver(onErrorRecover:: { (Error) -> Driver<T> in
                code
            })
.asDriver(onErrorDriveWith: Driver<T>) 
.asDriver(onErrorJustReturn: T) // error가 나면 반환할 값
post-custom-banner

0개의 댓글