Observable 텐카지노 및텐카지노 의 이해
* 이 포스트는 RxSwift 4.3.1, swift 4.2 버전을 기준으로 작성되었습니다.
* RxSwift 라이브러리의 텐카지노+Creation.swift 에 관련된 내용
* interval 은 이전 글에서 다루었기에 생략한다.
가장 기본적인 텐카지노생성메서드이다.
함수 원형
func create(_ 텐카지노: @escaping (AnyObserver<E) - Disposable) - 텐카지노<E
let createTest = Observable<String.create{ observer - Disposable in
observer.on(.next("event emit"))
observer.on(.completed)
return Disposables.create()
}.debug()
어떤 이벤트를 발생할지 Generic Type을 받는다.
observer.on(.next("event emit")) 는 이벤트를 발생시키는 구문이다.
observer.on(.completed) 는 observable 을 completed 시킨다.
observer.on(.error(error)) 는 error 를 발생시킨다.
Disposables.create() 를 통해 disposable 을 리턴한다.
Cold Observable로 Observable은 텐카지노 되면 이벤트를 발생하기 시작한다.
on(.error(error)) 와 on(completed) 는 상호 베타적인 관계이므로 같이사용하지 않는다.
* debug() 를 통해 텐카지노 의 동작과정을 로그로 볼수 있다.
Disposable 에도 여러 종류가 있으며 아래의 글에 정리했다.
RxSwift 의텐카지노Type.swift텐카지노Type+Extensions.swift 파일에 정의 되어있다.
1. func 텐카지노(onNext: ((Self.E) - Void)? = default, onError: ((Error) - Void)? = default, onCompleted: (() - Void)? = default, onDisposed: (() - Void)? = default) - Disposable
2.func 텐카지노(_ on: @escaping (RxSwift.Event<Self.E) - Void) - Disposable
3.func 텐카지노<O(_ observer: O) - Disposable where O : ObserverType, Self.E == O.E
첫번째
createTest.텐카지노(onNext: ((String) - Void)?,
onError: ((Error) - Void)?,
onCompleted: (() - Void)?,
onDisposed: (() - Void)?)
처리하고자 하는 이벤트를 골라 closure 를 설정할수 있다.
* closure 에서 self 에 접근할 경우에는순환참조가 걸리지 않게 특히 유의 하자.
[weak self] 등을 통해 순환참조를 막자.
첫번째 함수 원형을 사용한 예)
createTest.텐카지노(onNext: { [weak self]event in
print(event)
}).disposed(by: disposeBag)
결과
(createTest) - 텐카지노d
(createTest) - Event next(event emit)
event emit
(createTest) - Event completed
(createTest) - isDisposed
Observable의 debug() 로그가 빨간색이고, 텐카지노 에서 print 한 내용이 녹색이다.
텐카지노 가 되자 이벤트를 발생하기 시작했고, 텐카지노(onNext: 가 호출되는 것을 확인할수 있다.
이후 complete 되고 텐카지노 은 dispose 되었다.
두번째
createTest.텐카지노(_ on: ((Event<String) - Void))
이벤트를 전달받는다.
createTest.텐카지노 { (event) in
print(event)
switch event {
case .next(let string):
break
case .completed:
break
case .error(let error):
break
}
}.disposed(by: disposeBag)
세번째
class Observer: ObserverType{
typealias E = String
func on(_ event: Event<String) {
print(event)
}
}
let observer = Observer()
createTest.텐카지노(observer)
observer 를 만들어서 구독할수도 있다. 이경우 ObserverType 프로토콜을 따라야 한다.
종료를 결정하는 조건식 과반복문을 가진 Observable 텐카지노 함수이다.
함수 원형
func generate(initialState: Self.E,
condition: @escaping (Self.E) throws - Bool,
scheduler: ImmediateSchedulerType = default,
iterate: @escaping (Self.E) throws - Self.E) -RxSwift.텐카지노<Self.E
let generateTest = Observable.generate(initialState: 1, condition: { $0 < 30 }, iterate: { $0 + 10 })
1. 초기값을 가지고 첫 이벤트를 발생시킨다.
2. 조건식을 통해 Observable 의 종료(completed)를 결정한다.
3. 이전 이벤트 값으로다음 이벤트 값을가공하는 함수를 가진다.
세번째 parameter 로 scheduler 를 전달할 수 있는데 기본적으로는 현재 thread 를 사용한다.
( scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance )
별도의 thread 에서동작하도록 하고 싶다면 scheduler를 전달하자.
결과
(generateTest) - 텐카지노d
(generateTest) - Event next(1)
(generateTest) - Event next(11)
(generateTest) - Event next(21)
(generateTest) - Event completed
(generateTest) - isDisposed
31 이벤트는조건식에서 false 가 되므로 completed된것을 볼 수 있다.
단일 이벤트를 발생하는 텐카지노 을 생성한다.
함수 원형
public static func just(_ element: E) - 텐카지노<E
public static func just(_ element: E, scheduler: ImmediateSchedulerType) - 텐카지노<E
스케쥴러를 설정할수 있다.
let justTest = Observable<String.just("just one").debug()
justTest.텐카지노 { event in
print(event)
}.disposed(by: disposeBag)
결과
(justTest) - 텐카지노d
(justTest) - Event next(just one)
next(just one)
(justTest) - Event completed
(justTest) - isDisposed
하나의 이벤트만 발생하고 종료된것을 확인할수 있다.
각각 이벤트가 없이 종료되거나, 종료되지 않거나, error 를 리턴하며 종료되는 텐카지노 이다.
예를 들자면, 조건을 가지고 Observable 을 텐카지노하는 경우에, 텐카지노 조건이 맞지 않아 Observable 을 nil 등으로 리턴하여 에러처리 하는 것 보다 Observable 텐카지노이 되고 빈 이벤트 전달 후에 complete 되거나, 종료되지 않거나, 에러를 리턴하고 싶을때 사용 된다. ( 구조상 이벤트 처리의 의미가 에러 처리보다 더 분명하게 사용될때 )
TBD: "조건에 따라 Observable 텐카지노"을 설명할때 다시 설명
순차적으로 이벤트를 발생한다.
함수 원형
func of(_ elements: E ...,
scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance)
- 텐카지노<E
func from(_ array: [E],
scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance)
- 텐카지노<E
let ofTest = 텐카지노<String.of("My","name","is","tom").debug()
ofTest.텐카지노 { event in
print(event)
}.disposed(by: disposeBag)
결과
(ofTest) - 텐카지노d
(ofTest) - Event next(My)
next(My)
(ofTest) - Event next(name)
next(name)
(ofTest) - Event next(is)
next(is)
(ofTest) - Event next(tom)
next(tom)
(ofTest) - Event completed
completed
(ofTest) - isDisposed
이 예제 만으로는 딱히 of 가 필요한지 잘 이해되지 않을 수 있다.
이해를 돕자면RxSwift, 블랙잭 용어 알아보기두개를 merge()할때 쓰이곤 한다.
let array = ["My","name","is","tom"]
let fromTest = Observable<String.from(array)
fromTest.텐카지노 { event in
print(event)
}.disposed(by: disposeBag)
결과
of 와 동일하다.
lazy initialize 텐카지노 생성자 이다.
텐카지노 가 발생할때 Observable이텐카지노되므로, 메모리관리에 효율적이다.
Observable 텐카지노이 메모리를 많이 차지하는 등, lazy 한 텐카지노이 효율적일때 사용한다.
함수 원형
func deferred(_ 텐카지노Factory: @escaping () throws - 텐카지노<E)
- 텐카지노<E
let deferTest = Observable<String.deferred({Observable.just("defer")}).debug()
deferTest.텐카지노 { event in
print(event)
}.disposed(by: disposeBag)
설정한 element 로 반복적으로 이벤트를 발생.
설정한 Range 내의 이벤트를 발생. ( Int 타입만 가능 )
함수 원형
func repeatElement(_ element: E,
scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance)
- 텐카지노<E
func range(start: E,
count: E,
scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance)
- 텐카지노<E
let repeatTest = 텐카지노<String.repeatElement("repeat")
repeatTest.텐카지노 { event in
print(event)
}.disposed(by: disposeBag)
결과
next(repeat)
next(repeat)
next(repeat)
...
let rangeTest = Observable<Int.range(start: 0, count: 3)
rangeTest.텐카지노 { event in
print(event)
}.disposed(by: disposeBag)
결과
Next(3)
Next(4)
Next(5)
Completed
다음 매거진 : "Subject 알아보기"