전체 글
-
Combine - MapErrorIOS/Combine 2024. 6. 22. 17:55
오늘 소개할 에러 핸들링에 필요한 연산자로 .mapError Operator를 소개하겠습니다. 시작하기에 앞서, tryMap과 MapError로 에러 핸들링이 가능할 거 같은데요! 각 operator의 차이점이 있습니다 ㅎㅎ 먼저 map과 tryMap의 차이점을 다시 정립하고, mapError를 왜 사용하게 되는지 설명드리겠습니다. map vs tryMapMap은 지난 글에 이어 Publisher가 발행하는 Value를 특정한 형태로 다시 재발행하는 메커니즘, tryMap Operator의 경우 Error를 Throw 할 수 있는 Operator로 에러 발생 시 Subscriber에게 Completion 이벤트로 에러를 전달하게 됩니다.더보기다시보는 코드예제// Map Operator 코드예제[123, ..
-
Combine - Future PublisherIOS/Combine 2024. 6. 1. 18:23
메커니즘Just와 같이 구독자에게 한 번 값을 방출 후 Completion 이벤트를 방출하는 Publisher로 Just와 다른 점은 Asynchronously 하게 처리된다는 점입니다.구독자가 없어도 Future Publisher가 실행되며 나중에 해당 Future를 구독했을 때 이전에 실행된 값을 전달하는 메커니즘을 가지고 있습니다. 예제코드func futureIncrement(integer: Int, afterDelay delay: TimeInterval) -> Future { Future { promise in print("Future Start!!!") DispatchQueue.global().asyncAfter(deadline: .now() + de..
-
Combine Operators 2(Replace)IOS/Combine 2024. 4. 21. 19:03
안녕하세요 이번 글에선 Upstream 방출 값을 Replace하는 replaceNil, replaceEmpty를 알아보도록 하겠습니다. replaceNil(with:) - 옵셔널 값을 핸들링 할 때 사용되며 nil일 때 with파라미터의 지정된 값으로 변경할 수 있는 Operator입니다. ["A", nil, "C"].publisher .replaceNil(with: "-") .sink { print($0) } optional로 감싸져 있는 것을 unwrapping 하는 방법은 .eraseToAnyPublisher 및 with 파라미터에 as String으로 캐스팅 하는 방법이 있습니다. ["A", nil, "C"].publisher .eraseToAnyPublisher() .replaceNil(wit..
-
Combine Operators 1 (transforming)IOS/Combine 2024. 4. 13. 15:23
Operator Combine을 영어로 비교하자면 Operator는 단어 같은 존재입니다. Combine사용 시 필수적으로 사용되며, 다양한 연산을 맡아 처리하고 다시 방출하는 메커니즘을 가지고 있습니다. 이런 Operator를 가지고 방출된 값을 Collect해 배열로 합쳐 subscriber에게 전달하거나, 예외처리 같은 작업도 가능합니다. 따라서 Operators를 Upstream Publisher를 재가공한 다른 형태의 Publisher라 이해하면 좋을 거 같습니다. Combine에서 여러가지 Operator가 존재합니다. 1. collect() Publisher가 방출하는 값들을 Single Array로 묶어서 다시 방출하는 연산자입니다. Upstream Publisher가 종료될 때까지 기다리..
-
Combine Cancellable, subscriptionIOS/Combine 2024. 4. 7. 10:38
Cancellable protocol 애플에선 Cancellable 프로토콜을 activitiy or action들을 cancellation 할 수 있게 도와주는 프로토콜이라 설명하고 있습니다. 이런 Cancellable protocol을 conforming 하는 타입은 Combine에서 .sink, assign을 통한 구독자 생성 메소드가 있습니다. A protocol indicating that an activity or action supports cancellation. subscription Subscriber와 Publisher 사이를 이어주는 역할을 하는 프로토콜이자 Combine의 중요 개념입니다. Combine에선, Subscriber - Publisher 사이 스트림을 이어주는 역할을 ..
-
Clean Architecture 4(Data Layer)IOS/아키텍처 2024. 4. 5. 15:38
Celan Architecture의 마지막 글입니다. Data Layer는 이전에 언급한 Domain Layer DIP에 따른 실제 구현체들이 있는 영역입니다. 글을 읽기 전에 Domain Layer 파헤치기를 참고하셔서 같이 읽으시는 것을 추천합니다! 의존성 방향이 생성되는지 이해하는 게 목적인 소스 분석이기 때문에 가볍게 참고해 주세요! [이전 글] 2024.03.10 - [IOS/아키텍처] - Clean Architecture 1(Layer 알아보기) 2024.03.14 - [IOS/아키텍처] - Clean Architecture 2(Domain Layer 파헤치기) 2024.04.04 - [IOS/아키텍처] - Clean Architecture 3(Presentation Layer) [참고] ht..
-
Clean Architecture 3(Presentation Layer)IOS/아키텍처 2024. 4. 4. 20:32
본 글은 https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3 Oleh Kudinov님의 클린 아키택처 코드와 이론들을 분석하고 포스팅한 글입니다. 이어지는 글이니 참고 부탁드립니다. Clean Architecture and MVVM on iOS When we develop software it is important to not only use design patterns, but also architectural patterns. There are many different… tech.olx.com 2024.03.10 - [IOS/아키텍처] - Clean Architecture 1(Layer 알아보기) Clean Architectu..
-
Combine - Subscriber 2편IOS/Combine 2024. 3. 30. 17:41
Combine - Subscriber 1편에선 sink를 통해 Subscriber를 구현했습니다. 이번 글에선 assign(to:,on:) assing(to:) 방법을 통한 구독을 포스팅하겠습니다. 1. assign(to:on:) Publisher에서 방출받는 값을 Object의 KVO-Compliant property에 할당합니다. 예제코드는 다음과 같습니다. class ExampleObject { var value: String = "" { didSet { print(value) } } } let exampleObject = ExampleObject() let publisher = ["Hello", "Combine"].publisher publisher .assign(to: \.value, on: e..