분류 전체보기
-
[iOS/Swift] Combine 알아보기 viii야매 iOS 2023. 3. 26. 17:10
Combine 스케줄러 이해하기 이번 장에선 Scheduler 프로토콜과 주로 사용하는 연산자인 receive(on:)과 subscriber(on:)을 알아본다. Scheduler 프로토콜 탐구하기 Combine은 여러 비동기 작업을 수행한다. 그러므로 Combine은 스레드를 블로킹하지 않고 작업을 스케줄하고 실행하는 좋은 방법을 가져야 한다. 이를 위해 Combine은 Combine의 publishers가 작업을 수행할 수 있는 공간인 Scheduler라는 프로토콜을 정의했다. 대표적인 Scheduler 프로토콜 RunLoop DispatchQueue OS_dispatch_queue_main(DispatchQueue.main) OS_dispatch_queue_global(DispatchQueue.gl..
-
[iOS/Swift] Combine 알아보기 vii야매 iOS 2023. 3. 26. 17:10
비동기 프로세스를 Combine의 Future로 감싸기 지금까지 모든 예시들은 Combine의 내장된 publishers, operators를 사용했다. 하지만 현실에서는 커스텀한 비동기 연산들을 구현해 사용한다. 다행히도 Combine은 커스텀 publishers를 생성할 수 있도록 CurrentValueSubject와 PassthroughSubject 등 Subject 객체를 지원한다. Subject뿐만 아니라 Future를 사용해서 커스텀한 비동기 연산을 구현할 수 있다. Future Future는 Combine의 특별한 종류의 publisher로 task를 진행하고 task를 끝내면 promise를 사용해 subscriber에게 종료됐음을 알린다. 일반적인 Publisher와의 동작이 비슷해 보이..
-
[iOS/Swift] Combine 알아보기 vi야매 iOS 2023. 3. 26. 17:09
Combine으로 네트워킹하기 네트워킹은 여러 애플리케이션의 중요한 요소이다. Apple은 Combine을 사용해 원활하게 네트워킹을 할 수 있도록 URLSession의 extension을 제공한다. Combine을 사용해 간단한 네트워킹 레이어 만들기 일반적인 방식 가장 일반적으로 네트워킹을 사용하는 방법은 아래와 같다. func fetchURL(_ url: URL, completion: @escaping (Result) -> Void) { URLSession.shared.dataTask(with: url) { data, response, error intSubject guard let data else { if let error { completion(.failure(error)) } assertio..
-
[iOS/Swift] Combine 알아보기 v야매 iOS 2023. 3. 5. 22:57
Combine으로 User Input에 반응하기 유저가 Tap, Drag 등과 같은 액션을 하면 데이터가 변경되고 앱의 상태를 변경한다. 동적으로 일어나는 이런 행동들을 Combine을 통해 어떻게 대응할 수 있는지에 대해 알아본다. User Input에 따라 UI 갱신하기 이때까지 assign(to: on:)을 사용해 publisher가 방출한 데이터를 UI 요소에 넣어줬다. publisher가 방출한 문자열을 UILabel의 텍스트로 넣어주는 방식 하지만 그것보다 Property가 방출한 값이 프로퍼티를 갱신하고 그 프로퍼티가 UI를 갱신하게 할 수도 있다. 날 것 그대로 버전 class SliderViewController: UIViewController { let slider = UISlider(..
-
[iOS/Swift] Combine 알아보기 iv야매 iOS 2023. 2. 27. 20:05
유저 인터페이스 업데이트 하기 1,2,3 장은 Combine을 확실히 이해하기 위한 기본적인 지식과 Combine을 효율적으로 사용하기 위해 이해도를 높이는 시간이었다. 이제는 Combine을 이용해 User Interface와 상호작용하는 것에 대해 알아본다. 모든 예시는 UIKit으로 구현한다. SwiftUI는 Combine과 밀접한 연관이 있으므로 SwiftUI 영역의 경계와 Combine 영역의 경계를 구분하는 것이 어렵다. 모델과 데이터를 위한 publisher 생성하기 지금까지 Publishers.Sequence를 주로 사용했었다. 하지만 Publishers.Sequence로는 개발을 하면서 마주하는 여러 문제를 해결하는 것이 어렵다. 모델과 데이터를 위한 publisher 만드는 방법은 총 ..
-
[iOS/Swift] Combine 알아보기 iii야매 iOS 2023. 2. 25. 15:13
Transforming Publishers Combine에서 값들은 publisher에 의해 subscriber에게 전달된다. 대부분의 경우에선 publisher가 방출한 값을 subscriber가 원하는 형태로 변환하는 과정을 거쳐 subscriber에게 전달된다. Combine은 변환하는 연산자를 제공한다 map (들어온 값을 필요한 형태로 변환) error(catch error or handle error) publisher으로부터 받을 값의 수를 제한하는 것 Publisher들과 연산자들을 chaining해서 복잡한 비동기 코드를 operation list로 표현할 수 있다. let dataTask = URLSession.shared.dataTaskPublisher(for: url) .retry(..
-
[iOS/Swift] Combine 알아보기 ii야매 iOS 2023. 2. 23. 23:49
Publisher?? Combine에서 모든 것은 Publisher로부터 시작한다. Publisher가 없다면 구독할 대상이 없고 그러므로 값을 받지 못한다. Publisher 알아보기 💡 Playground를 사용했다. // publisher의 type = Publishers.Sequence let publisher = [1,2,3].publisher 위 코드 블럭에 있는 코드를 배열을 publisher로 변환한 코드다. publisher는 구독되면 배열의 요소를 하나씩 방출한다. Publisher 타입에 대해 알아보기 위 코드 블럭에서 publisher의 타입은 Publishers.Sequence 타입으로부터 알 수 있는 것은 Combine은 Publishers라고 불리는 객체를 담고 있고 Publi..
-
[iOS/Swift] Combine 알아보기 i야매 iOS 2023. 2. 22. 23:13
Combine은 Functional Reactive Programming framework Combine을 이해하기 위해선 Functional Reactive Programming이 무엇인지부터 알아야 한다. Functional Reactive Programming(FRP)의 이해 FRP의 Functional Programming FRP는 Functional Programming을 기반으로 만들어졌다. FRP는 개발자들이 작은 함수들을 조합해 코드를 작성할 수 있도록 한다. 작은 함수 : 들어온 입력인 인자를 사용해 동작하는 함수(함수 바깥에 있는 것들을 변경하지 않는다) 이후에 나올 순수함수 개념 map 대표적인 예시로는 swift에서 제공하는 map 함수가 있다. // map 함수읜 인자로 받은 클로..