Future
์ ๋ค๋ฆญ ํด๋์ค | ๊ฒฐ๊ตญ์๋ ํ๋์ ๊ฐ์ ๋ธ ํ ์ข ๋ฃํ๊ฑฐ๋ ์คํจํ๋ Publisher
์ด๋์ ๋ผ์ด์ ๋ ํ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ค.
attemptToFulfill
: Publisher๊ฐ ์์๋ฅผ ๋ฐฐ์ถํ๊ฑฐ๋ ์๋ฌ๋ก ์ข ๋ฃํ ๋ Publisher๊ฐ ํธ์ถํ๋Future.Promise
Future๋ Future.Promise
๋ผ๋ ํ์
๋ณ์นญ์ผ๋ก ํด๋ก์ ๋ฅผ ์ ๊ณตํ๋ค. ์ด ํด๋ก์ ๋ Result ํ์
์ ์ธ์๋ฅผ ํ๋ ๋ฐ๊ณ ๋ฐํ๊ฐ์ด ์๋ ํํ๋ค.
์ด ํด๋ก์ ๋ฅผ ์ฌ์ฉํ์ฌ Future์ ์ด๋์
๋ผ์ด์ ๋ก ๋์ด๊ฐ๋ ํด๋ก์ ์์ ์ด๋ ํ ์์
์ ์ํํ๊ณ ์ฑ๊ณตํ์ ๋์ ๊ฐ์ด๋ ์คํจํ์ ๋์ ์๋ฌ๋ฅผ Future.Promise
ํด๋ก์ ๋ก ์ ๋ฌํ๋ค.
๊ฒฐ๊ตญ Future๋ ์ด๋ ํ ์์ ์ ์ํํ ํ ํ๋์ ๊ฐ์ ๋ธ ํ ์ข ๋ฃํ๊ฑฐ๋ ์คํจํ๋ค.
Future<Void, Error> { promise in
// 1
promise(.success(Void()))
// 2
promise(.failure(error))
}
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine Future Error")
case .finished:
print("Combine Future Finish")
}
}, receiveValue: {
print("Combine Future")
})
.store(in: &cancellables)
// Combine Future
// Combine Future Finish
Future๋ ํ๋์ ๊ฐ์ ๋ธ ํ ์ข ๋ฃํ๊ฑฐ๋ ์คํจํ๋ค.
1์ ์ฝ๋๊ฐ ์คํ๋๋ฉด ๊ฐ์ ๋ด๋ฏ๋ก Publisher๋ ์ข ๋ฃํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 2์ ์ฝ๋๋ ํจ๋ ฅ์ด ์๊ฒ ๋๋ค.
Future<Void, Error> { promise in
// 1
promise(.failure(error))
// 2
promise(.success(Void()))
}
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine Future Error")
case .finished:
print("Combine Future Finish")
}
}, receiveValue: {
print("Combine Future")
})
.store(in: &cancellables)
// Combine Future Error
๋ง์ฐฌ๊ฐ์ง๋ก 1์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋ฌ๋ฅผ ๋ด๋ฏ๋ก Publisher๋ ์๋ฌ๋ฅผ ๋ธ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 2์ ์ฝ๋๋ ํจ๋ ฅ์ด ์๊ฒ ๋๋ค.
RxSwift
Single์ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
Single<Void>.create { observer in
observer(.success(Void()))
// ์๋ฌ๋ฅผ ๋ด๋ ๊ฒฝ์ฐ ์์ ์ฝ๋ ๋์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
// observer(.failure(error))
return Disposables.create()
}
.subscribe(onSuccess: { print("RxSwift Future") })
.disposed(by: disposeBag)
// RxSwift Future
ReactiveSwift
ํด๋น ๋์์ ๊ตฌํํ๊ธฐ ์ํ ์คํผ๋ ์ดํฐ๋ฅผ ์ ๊ณตํ์ง ์๋๋ค.
์ฐธ๊ณ
Last updated
Was this helpful?