Publisher
#Combine #Publisher
Just
- 가장 단순한 형태의 Publisher 입니다. 에러 타입은 항상 Never 입니다.
Just((0...5)) .sink { value in print(value) // 0...5 }
Future
- 일반적으로 Publisher의 처리를 sink 라는 구독을 형태로 많이 처리하게 되는데 이 때 클로저를 전달하는 과정에서 콜백 기반의 completion 핸들러를 사용하게 되는데 Futrue를 통하여 더욱 깔끔한 코드 작성이 가능해 집니다.
let myFuture = Future<Int, Never> { promise in
promise(.success(10))
}
myFuture.sink { value in
print(value) // 10
}
- URLSeesion 이나 Alamofire 등 RestFul 관련 API 비동기 요청시에 해당 요청이 성공했는지, 실패 했는지에 대한 여부를 리턴해주는 예제 입니다.
func isSuccessAPIRequest() -> AnyPublisher<Bool, Never> {
Future<Bool, Never> { promise in
urlRequestPublisher
.sink(
receiveCompletion: { completion in
switch completion {
case .finished:
print("finished")
promise(.success(true))
case .failure(let error): print(error.localizedDescription)
promise(.success(false))
}
}, receiveValue: { value in
print(value)
}
)
}
.eraseToAnyPublisher()
}
isSuccessAPIRequest()
.sink {
if $0 {
// true
} else {
// false
}
}
Fail
- 지정한 종류의 에러로 즉시 종료하는 Publisher 입니다.
Empty
- 값을 게시하지 않고 선택적으로 즉시 완료되는 Publisher 입니다.
Empty<String, Never>()
.sink(
receiveCompletion: {
print($0) // finished
},
receiveValue: {
print("receiveValue : \($0)") // 출력 안함
}
)
Deferred
- 구독이 일어나기 전까지 대기상태로 있다가 구독이 일어 났을 때 Publisher가 결정이 됩니다. 클로저 안에는 지연 실행 할 Publisher 를 반환합니다.
Deferred { Just(Void()) } .sink(receiveValue: { print("Diferred") })
Sequence
- 요소의 주어진 Sequence를 반환하는 Publisher 입니다.
- Publisher가 Sequence에 있는 요소들을 하나 하나 제공해주며 모든 요소들이 다 제공되었을 때 종료됩니다.
Publishers.Sequence<[Int], Never>(sequence: [1, 2, 3]) .sink(receiveValue: { print("Sequence : \($0)") }) /* Sequence : 1 Sequence : 2 Sequence : 3 */
반응형
'ios > Combine' 카테고리의 다른 글
Swift - Combine 요약 (Publisher, Operator 종류) (0) | 2022.02.04 |
---|---|
SwiftUI - Combine (3) Combine의 생명 주기(Life Cycle) (0) | 2022.01.21 |
SwiftUI - Combine (2) 핵심 개념 (Publisher, Subscriber, Operator, Subject) (0) | 2022.01.20 |
SwiftUI - Combine (1) 소개 Combine을 사용하는 이유 (0) | 2022.01.18 |