728x90
Combine을 쓰면 좋은 이유
- 아래 코드 예시는 로그인을 할때 userId와 userName을 가져올때 사용할 수 있는 코드이다.
- switch case를 사용하며 값이 두개 밖에 처리 할 것이 없을때는 사용 가능하겠지만 값이 점점 많아지고 복잡해지면 switch case를 이용해서 하기 어려워질 것이다.
func fetchUserId(_ completionHandler: @escaping (Result<Int, Error> ) -> Void){
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
let result = 24
completionHandler(.success(result))
}
}
func fetchName(for userId: Int,_ completionHandler: @escaping (Result<String, Error>) -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
let result = "Bulmang"
completionHandler(.success((result)))
}
}
func run() {
fetchUserId { userIdResult in
switch userIdResult {
case .success(let userId):
fetchName(for: userId) { nameResult in
switch nameResult {
case .success(let name):
print(name)
case .failure(let failure):
// 실패 처리
break
}
}
case .failure(let failure):
// 실패 처리
break
}
}
}
다른 비동기 처리 방식과의 차이점
특징 "async/await" "Combine" RxSwift
비동기 작업 처리 | 개별 비동기 함수 호출 | Publisher-Subscriber 모델 | Observable-Observer 모델 |
에러 처리 | 일반적인 try-catch 구문 사용 | sink 및 Operator에서 에러 처리 | onError 이벤트 핸들링 |
코드 구조 | 동기적인 코드와 유사함 | 비동기 스트림 및 데이터 흐름의 조작을 위한 연산자 활용 | 비동기 스트림 및 연산자 활용 |
간소화된 코드 작성 | 간결하고 직관적인 코드 작성 | 코드는 조금 더 길어질 수 있지만 강력한 연산자 활용 | 코드는 길어지지만 강력한 연산자 활용 |
복잡한 비동기 흐름 관리 | 일반적으로 한 번에 한 비동기 작업 처리 | 여러 비동기 작업의 조합, 복잡한 데이터 흐름 관리 | 여러 비동기 작업의 조합, 데이터 흐름 관리 |
적합한 사용 사례 | 간단한 비동기 작업 및 단일 비동기 호출 | 여러 비동기 작업의 관리, 데이터 스트림 처리 | 여러 비동기 작업의 관리, 데이터 스트림 처리 |
지원 범위 및 버전 | Swift 5.5 이상 | iOS 13 이상 | iOS 8 이상, macOS 10.10 이상 |
간단한 비동기 처리를 할때는 **"async/await"**가 좋다
하지만 여러 비동기 작업 관리와 데이터 스트림 처리를 하려면 Combine, RxSwift 이지만 SwiftUI에 더 효율성 있는 프레임워크는 Combine 이다.
Publisher를 이용한 코드 예시
[1, 2, 3, 4, 5]
.publisher
.print()
.filter { $0.isMultiple(of: 2) == false }
.map { $0 * $0 }
.sink { value in
print(value)
}
.store(in: &cancel)
설명
- .print()를 사용하여 Debug를 쉽게 확인할 수 있다.
- 출력 결과 :
- receive value: (1) 1 receive value: (2) request max: (1) (synchronous) receive value: (3) 9 receive value: (4) request max: (1) (synchronous) receive value: (5) 25 receive finished
728x90
'SwiftUI > 정리' 카테고리의 다른 글
XCODE IOS 프로파일링 디버깅 하는 방법 (1) | 2024.01.07 |
---|---|
[SwiftUI] 아키텍처 고민 (0) | 2024.01.06 |
[SwiftUI] Combine (0) | 2023.09.16 |
[Swift] SwiftLint (0) | 2023.09.04 |
[SwiftUI] NavigationStack (0) | 2023.09.02 |