[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/Combine & Rx 17

[Combine] share, multicast

share 하나의 upstream publisher의 output을 여러 subscriber들이 공유할 수 있도록 해준다. Example 1 guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts") else { fatalError("Invalid URL") } let request = URLSession.shared.dataTaskPublisher(for: url).map(\.data).print().share() let subscription1 = request.sink(receiveCompletion: { _ in }, receiveValue: { print("Subscription 1") print($0) }) let sub..

[Combine] timer (by Runloop, Timer Class, DispatchQueue)

Combine을 통해 Timer를 생성하고 관리해보자. Runloop 입력소스 및 타이머 이벤트를 전달받는 인터페이스인 Runloop를 활용하여 Timer cacellable 객체를 생성할 수 있다. Runloop 공식문서에서 cacellable 객체를 생성하는 메서드를 확인할 수 있다. (마지막 schedule 메서드) Example let runLoop = RunLoop.main let subscription = runLoop.schedule(after: runLoop.now, interval: .seconds(2) , tolerance: .milliseconds(100)) { print("Timer fired") } runLoop.schedule(after: .init(Date(timeInterva..

[Combine] Operator (4): Sequence Operator

Sequence Operator Combine에서 Operator는 Publisher를 가공해 다른 형태나 구성으로 변경해주는 역할을 한다. Upstream으로부터 전달받은 데이터를 가공하여 downstream으로 전달하는 것이다. 그 중 배열로 이루어진 Output을 변환하는 Operator(Sequence Operator)를 정리해보겠다. min and max Example let publisher = [1,-45,3,45,100].publisher publisher .max() .sink { print($0) } Output 100 publisher가 finish될 때까지 기다리고 이 후 연산을 처리한다. 데이터 중 max(min)값을 반환한다. first and last Example let pu..

[Combine] Operator (3): Combining Operator

Combining Operator Combine에서 Operator는 Publisher를 가공해 다른 형태나 구성으로 변경해주는 역할을 한다. Upstream으로부터 전달받은 데이터를 가공하여 downstream으로 전달하는 것이다. 그 중 데이터를 추가 혹은 합성하는 Operator(Combining Operator)를 정리해볼까 한다. prepend Example let numbers = (1...5).publisher let publisher2 = (500...510).publisher numbers.prepend(100,101) .prepend(-1,-2) .prepend([45,67]) .prepend(publisher2) .sink { print($0) }Output 500 501 502 50..

[Combine] Operator (2): Filtering Operator

Filtering Operator Combine에서 Operator는 Publisher를 가공해 다른 형태나 구성으로 변경해주는 역할을 한다. Upstream으로부터 전달받은 데이터를 가공하여 downstream으로 전달하는 것이다. 그 중 데이터를 필터링해주는 Operator(Filtering Operator)를 정리해보자. filter Example let numbers = (1...20).publisher numbers.filter { $0 % 2 == 0 } .sink { print($0) }Output 2 4 6 8 10 12 14 16 18 20 조건에 통과하는 데이터들만 반환한다. removeDuplicates Example let words = "apple apple apple fruit ..

[Combine] Operator (1): Transforming Operator

Transforming Operator Combine에서 Operator는 Publisher를 가공해 다른 형태나 구성으로 변경해주는 역할을 한다. Upstream으로부터 전달받은 데이터를 가공하여 downstream으로 전달하는 것이다. 그 중 데이터의 형태(타입)를 바꿔주는 Operator(Transforming Operator) 정리해볼 것이다. collect Example ["A","B","C","D","E"].publisher.collect(3).sink { print($0) } Output ["A", "B", "C"] ["D", "E"] Input 데이터를 모아서 Array로 한번에 반환하도록 처리한다. 파라미터로 숫자를 넣어서 몇개를 하나로 묶을지도 결정할 수 있다. (default는 모든 ..

[RxSwift] Reactive Programming & RxSwift

부스트캠프에서 만난 팀원들과 하는 스터디의 이번주 주제 중 하나는 'RxSwift를 왜 사용하는지 설명하시오.'였다. 그런데 막상 공부하려고 보니 아직 Reactive Programming에 대해서도 정확히 파악하고 있지 못함을 느꼈다. (저번에 스터디도 했는데... 더 열심히 해야겠다...🥲 ) 그래서 이번 기회에 Reactive Programming와 RxSwift의 간단한 개념, 그리고 RxSwift를 왜 사용하는지와 단점까지 차례대로 정리해볼까 한다! Reactive Programming Reactive Programming이란 비동기적 데이터 흐름과 전달에 관한 프로그래밍 패러다임이다. 이러한 Reative Programming의 핵심은 모든 것을 비동기적 데이터의 Stream으로 간주하고, 다..