일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- rxswift
- 애니메이션
- swiftUI
- Protocol
- Clean Code
- uiscrollview
- MVVM
- clean architecture
- UICollectionView
- collectionview
- RxCocoa
- combine
- map
- Xcode
- 스위프트
- uitableview
- SWIFT
- 클린 코드
- HIG
- 리펙터링
- ios
- ribs
- UITextView
- Refactoring
- 리펙토링
- Human interface guide
- tableView
- swift documentation
- Observable
- 리팩토링
- Today
- Total
목록iOS Combine (SwiftUI) (19)
김종권의 iOS 앱 개발 알아가기
목차) Combine - 목차 링크 Map 값 요소들을 하나씩 맵핑 (값에 변화를 주는 연산자) let publisher1 = [1, 2, 3].publisher let cancellable1 = publisher1 .map { $0 + 2 } .sink(receiveValue: { print($0) }) /* 3 4 5 */ tryMap map 클로저 내부에서 예외가 던져질 수 있는 연산이 있을때 사용 예외 처리하는 곳은 sink의 receiveCompletion에서 수행 enum SomeError: Error { case zero } let publisher2 = [2, 1, 0].publisher let cancellable2 = publisher2 .tryMap { guard $0 != 0 els..
목차) Combine - 목차 링크 Scheduler 언제, 어떻게 클로저가 실행될지 정하는 프로토콜 thread 설정도 가능 (main, global) 시간 설정도 가능 Scheduler 사용 방법 스레드 변경 receive(on:): downstream의 스레드 변경 subscribe(on:): upstream의 스레드 변경 receive(on:), subscribe(on:) 안쓴 경우 스레드 확인 DispatchQueue.global()로 실행한 경우, main thread가 아닌 global thread에서 sink의 클로저 부분이 동작 즉, 따로 스케줄러 설정을 하지 않으면 subject의 이벤트를 발행하는 쪽의 스케줄러와 동일하기 sink 클로저 부분이 동작 let subject = Pass..
목차) Combine - 목차 링크 Subject Publisher의 일종이고 (Publisher 프로토콜을 준수하고 있는 형태), 이 인스턴스는 이벤트를 방출할 수 있는 send(subscription:) 기능이 존재 애플에서는 이벤트 방출을 "inject"라고 명명 @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) public protocol Subject : AnyObject, Publisher { func send(subscription: Subscription) } PassthoughSubject downstream subscribers에게 값을 broadcast하는 subject 값을 저장하고 있지는 않고 단순히 값을 토스 해주는 역할..
목차) Combine - 목차 링크 Susbscriber protocol이며 이 프로토콜을 준수하는 subscriber 인스턴스를 만들면, 이 subscriber로 다른 publisher를 구독하여 사용 구독했을때 처리가 이 Subscriber 구현체에서 처리 @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) public protocol Subscriber : CustomCombineIdentifierConvertible { associatedtype Input associatedtype Failure : Error func receive(subscription: Subscription) func receive(_ input: Self.Input..
목차) Combine - 목차 링크 Just 에러 타입은 항상 Never인 가장 단순한 형태의 Publisher Just(1) .sink { print("Just: \($0)") } // Just: 1 Just((1,2,3)) .sink { print("Just: \($0)") } // Just: (1, 2, 3) Just([1,2,3]) .sink { print("Just: \($0)") } // Just: [1, 2, 3] Sequence 주어진 Sequence를 방출하는 Publisher Publishers.Sequence(sequence: [1,2,3]) .sink( receiveCompletion: { print("receiveCompletion: \($0)") }, receiveValue: {..
목차) Combine - 목차 링크 Publisher Publisher는 단순히 이벤트 스트림에서 이벤트를 방출 시킬 수 있는 타입 extension으로 map, tryMap 등 다양한 연산자를 사용할 수 있어서 이벤트 스트림의 핵심 프로토콜 @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) public enum Publishers { } AnyPublisher Publisher 를 준수하고 있는 struct이며, Publisher를 wrapping하고 있는 가장 추상화된 Publisher @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) @frozen public struct AnyPu..
목차) Combine - 목차 링크 Cancellable Combine 작업들을 취소할 수 있다는 의미를 가지고 있는 프로토콜 Combine에서는 이벤트 스트림을 action이라는 이름을 사용, action을 취소할 수 있는 프로토콜이 Cancellable이라는 의미 AnyCancellable final public class AnyCancellable : Cancellable, Hashable .sink로 이벤트를 구독하면 리턴값으로 AnyCancellable이 얻어지는데 이 값을 가지고 cancel()하여 언제든지 구독을 취소시킬 수 있는 기능 final class MyModel { @Published var number: Int init(number: Int) { self.number = numbe..
목차) Combine - 목차 링크 @Published propertyWrapper 형태이며 내부적으로 didSet에서 이벤트 방출하는 역할 @propertyWrapper public struct Published 사용하는 쪽에서는 $ 기호를 이용하여 projectedValue에 접근 propertyWrapper의 projectedValue 개념은 이 포스팅 글 참고 final class MyData { @Published var number: Int init(number: Int) { self.number = number } } let data = MyData(number: 20) data.$number .sink { print("change value? = \($0)") } data.number = ..