RxSwift) Observable, Subscribe

RxSwift의 목적 

closure로 비동기 데이터 처리 코드를 작성할 시 코드가 복잡해짐. 비동기를 받고난 후 또 비동기를 받아야 할때 코드가 복잡해지고 길어짐. 따라서 return으로 비동기 데이터를 받을 수 있게 한것이 RxSwift이다

Observable

나중에 오는 데이터 타입이라고 생각을 하면 된다. 제네릭을 이용해 타입을 정의.

Observable<String> //나중에 오는 String타입

Observable로 데이터하나 보낼때 

Observable.create(){ emitter in
	emitter.next("Hello")
    emitter.onCompleted()
    return Disposable.create()
}

 

Just

하나 보내는데 많은 코드가 필요하므로 단축해서 사용할 수 있다.

Observable.just("Hello")

just는 배열을 보낼시 배열을 통째로 보낸다.

Observable.just(["Hello","World"]) // ["Hello","World"]가 보내짐

from

from은 배열을 보낼시 배열의 요소 각각 하나씩을 보낸다.

Observable.from(["Hello","World"])
//Hello
//World

onNext()

기존의 비동기 처리는 escaping 클로저로 값을 전달했다. onNext는 이와 같은 역할을 한다. 데이터를 onNext를 통해 전달한다.

 

subscribe

Observable로 데이터가 왔을때 데이터를 이용하여 어떤 작업을 할지 클로저로 구현한다. 

var ob = Observable.from(["Hello","World"])

ob.subscribe(onNext: {
    print($0)
})
//Hello
//World

operator(연산자)

observable과 subcribe 사이에 넣어서 데이터를 변경을 해주는 것을 operator이라고 한다.

observeOn

해당 subcribe를 어떤 스레드에서 작업할지 설정 할 수 있다.

ob.observe(on: MainScheduler.instance) //메인스레드에서 처리 DispatchQueue.main.async와 같은 역할
    .subscribe(onNext: {
    print($0)
})

순환참조

subscribe에서 작업을 할때 클로저로 인해 self를 사용하는데, 이때 순환참조가 일어난다. self는 클로저가 없어지길 기다리고, 클로저는 self가 없어지길 기다린다. 이때 observable이 disposabled되면 클로저가 소멸, 순환참조가 사라진다. 근데 그냥 편하게 weak self를 쓰는게 더 나을것 같다.

'iOS > RxSwift' 카테고리의 다른 글

Observable의 특징과 share  (0) 2023.11.06