์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- operator
- @State
- @Binding
- dismiss
- RxSwift
- Bug
- RxCocoa
- Creating Operators
- init?
- URL(string:)
- NavigationLink
- Operater
- Xcode
- subject
- RFC1738/1808
- IOS
- vim
- NullObject
- graphql
- init
- Operators
- swift6
- @EnvironmentObject
- nonisolated
- SwiftUI
- ios14
- typeorm
- nestjs
- @Environment
- SWIFT
- Today
- Total
Tunko Development Diary
RxSwift) Creating Operators (repeatElement, deferred, create) ๋ณธ๋ฌธ
RxSwift) Creating Operators (repeatElement, deferred, create)
Tunko 2022. 5. 31. 16:02repeatElement
let disposeBag = DisposeBag()
let element = "๐"
Observable.repeatElement(element)
.take(10)
.subscribe { print($0) }
.disposed(by: disposeBag)
์ถ๋ ฅ
next(๐)
next(๐)
next(๐)
next(๐)
next(๐)
next(๐)
next(๐)
next(๐)
next(๐)
next(๐)
completed
๋์ผํ ์์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐฉ์ถํ๋ ์ฐ์ฐ์์ ๋๋ค.
๋ฌดํ์ ๋ฐ๋ณตํฉ๋๋ค.
๋ฐ๋ผ์ ๋ฐฉ์ถ๋๋ ํ์๋ฅผ ์ ํด์ฃผ๋๊ฒ ์ค์ํฉ๋๋ค. take ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ 10๊ฐ์ ์์๋ง ๋ฐฉ์ถ๋๋๋ก ํด์ฃผ์์ต๋๋ค.
deferred
let disposeBag = DisposeBag()
var flag = true
let observable : Observable<Int> = Observable.deferred {
flag.toggle()
if flag {
return Observable.just(1)
} else {
return Observable.just(2)
}
}
observable
.subscribe { print($0) }
.disposed(by: disposeBag)
์ถ๋ ฅ
next(2)
completed
ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ต์ ๋ฒ๋ธ์ ์์ฑํ๋ ์ฐ์ฐ์ ์ ๋๋ค. flag ์กฐ๊ฑด์ ๋ฐ๋ผ 2๊ฐ ๋ค์ด๊ฐ just์ต์ ๋ฒ๋ธ์ด ๊ตฌ๋ ๋๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
create
just, of, from, range, genarate, repeatElement, deferred ๋ฑ์ ์ฐ์ฐ์๋ ์ต์ ๋ฒ๋ธ์ ๋ฐ์ ์์๋ฅผ ๋ฐฉ์ถํ๊ณ completed๋ฅผ ํตํด์ ์๋ฃ๋ฉ๋๋ค
์ด๋ฐ ๋์ ๋ฐฉ์์ ๋ฐ๊พธ๊ธฐ ์ํด์ create๋ฅผ ํตํด์ ์๋ก์ด ์ต์ ๋ฒ๋ธ์ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.
create๋ Observer์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ Disposable์ ๋ฆฌํดํฉ๋๋ค.
return์ ์ ์ ํด์ผ ํฉ๋๋ค. Disposable์ ๋ฆฌํดํ๋ผ๊ณ ๋์ด์๋๋ฐ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ผญ Disposables.create() ๋ก ๋ฆฌํดํด์ค๋๋ค.
create์ต์ ๋ฒ๋ธ์ ํตํด ์์๋ฅผ ๋ฐฉ์ถํ ๋๋ onNext๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
create์ต์ ๋ฒ๋ธ์ ์ข ๋ฃํ๊ธฐ ์ํด์ onError, onCompleted ์ค ํ๋๋ฅผ ๊ผญ ํธ์ถํด์ผํฉ๋๋ค.
let disposeBag = DisposeBag()
enum MyError: Error {
case error
}
Observable<String>.create { (observer) -> Disposable in
observer.onNext("๋ด๊ฐ ํ๊ณ ์ถ์ ์ฒ๋ฆฌ")
observer.onCompleted()
return Disposables.create()
}
.subscribe{ print($0) }
.disposed(by: disposeBag)
์ถ๋ ฅ
next(๋ด๊ฐ ํ๊ณ ์ถ์ ์ฒ๋ฆฌ)
completed
์น์์ html ๋ฌธ์์ด์ ๋ฐ๋ ์ต์ ๋ฒ๋ธ ์์ฑ
Observable.create { (observer) -> Disposable in
guard let url = URL(string: "<https://huniroom.tistory.com/>") else {
observer.onError(MyError.error)
return Disposables.create()
}
guard let html = try? String(contentsOf: url, encoding: .utf8) else {
observer.onError(MyError.error)
return Disposables.create()
}
observer.onNext(html)
observer.onCompleted()
return Disposables.create()
}
.subscribe{ print($0) }
.disposed(by: disposeBag)
'Development > RxSwift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
RxSwift) Filtering Operators (take) (0) | 2022.06.01 |
---|---|
RxSwift) Filtering Operators [ignoreElements, element(at:), filter, skip, skip(while:), skip(until:), skip(duration:scheduler:)] (0) | 2022.05.31 |
RxSwift) Relay (RxSwift 6) (0) | 2022.05.30 |
RxSwift) AsyncSubject ๋? (0) | 2022.05.30 |
RxSwift) ReplaySubject ๋? (0) | 2022.05.30 |