티스토리 뷰
Why ?
- 알고 사용하기 위해서 하나씩 정리해보고 맛보려고한다.
- Combine 핵심 프로토콜 중 Publisher에 대해 정리해보자.
Publisher 종류
- Just - 가장 단순한 형태의 Publisher로 에러타입으로 Never를 갖는다.
- Promise - Just와 비슷하지만 Filter Type을 정의할 수 있다.
- Fail - 정의된 실패타입을 내보낸다.
- Empty - 어떤 데이터도 발행하지 않는 Publisher로 주로 에러처리나 Optional값을 처리할 때 사용된다.
- Sequence - 데이터를 순차적으로 발행하는 Publisher로 (1..10).Publisher로 이에 해당한다.
- ObservableObjectPublisher - SwiftUI에서 사용되는 ObservableObject를 준수하는 Publisher이다.
Just
let _ = Just(5) // 1
.map { value -> String in // 2
return "a string"
}
.sink { receivedValue in // 3
print("The end result was \\(receivedValue)")
}
- Just를 사용한 간단한 Combine 파이프 라인
- 에러타입은 항상 Never이다.
Future
let myFuture = Future<Int, Never> { promise in
promise(.success(10))
}
myFuture.sink { value in
print(value) // 10
}
- Publisher의 처리를 sink로 많이 처리하게 되는데 이 때 클로저를 전달하는 과정에서 콜백 기반의 completion handler를 사용하게 되는데 Future를 통하여 더욱 깔끔한 코드 작성이 가능해진다.
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
}
}
- URLSession이나 Alamofire 등 RESTFul 관련 API 비동기 요청시에 해당 요청이 성공했는지, 실패 했는지에 대한 여부를 리턴해주는 예제이다.
Fail
- 지정한 종류의 에러로 즉시 종료하는 Publisher이다.
Empty
Empty<String, Never>()
.sink(
receiveCompletion: {
print($0) // finished
},
receiveValue: {
print("receiveValue : \\($0)") // 출력 안함
}
)
- 값을 게시하지 않고 선택적으로 즉시 완료되는 Publisher이다.
Deferred
Deferred { Just(Void()) }
.sink(receiveValue: { print("Diferred") })
- 구독이 일어나기 전까지 대기상태로 있다가 구독이 일어났을 때 Publisher가 결정된다.
- 클로저 안에는 지연실행 할 Publisher를 반환한다.
Sequence
Publishers.Sequence<[Int], Never>(sequence: [1, 2, 3])
.sink(receiveValue: {
print("Sequence : \\($0)")
})
- 요소의 주어진 Sequence를 반환하는 Publisher이다.
- Publisher가 Sequence에 있는 요소들을 하나하나 제공해주며 모든 요소들이 다 제공되었을 때 종료된다.
Reference
https://todayssky.tistory.com/17?category=984240
Swift - Combine의 Publisher 알아보기 Just, Future, Fail, Empty, Deferred, Sequence
Publisher #Combine #Publisher Just 가장 단순한 형태의 Publisher 입니다. 에러 타입은 항상 Never 입니다. Just((0...5)) .sink { value in print(value) // 0...5 } Future 일반적으로 Publisher의 처리를 sin..
todayssky.tistory.com
'iOS > Swift' 카테고리의 다른 글
[Swift] Class와 Struct의 차이 (0) | 2022.11.09 |
---|---|
[Swift] extension과 상속의 차이 (0) | 2022.11.09 |
[Swift] Combine - Scheduler (0) | 2022.06.07 |
[Swift] Combine - Subject (0) | 2022.06.07 |
[Swift] Combine (0) | 2022.06.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Login
- Swift
- Generic
- tabview
- 곰튀김
- CodingTest
- Protocol
- Xcode
- AWS Fargate
- strcut
- frame과 bounds 차이
- 의미있는이름
- MVVM
- Custom
- SwiftUI
- ObservedObject
- onTapGesture
- OCR
- ChatGPT
- kakao
- AWS
- 카메라
- enumerations
- file private
- rxswift
- docker
- IOS
- delegate
- Git
- navigation
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함