swift 29

RxDataSources로 multiple section collection view 구현하기

모델 정의 collectionview cell에 들어갈 데이터의 모델을 정의한다. struct Model { var color: Int } SectionModel 정의 section을 구분할 열거형을 만들고 SectionModelType 프로토콜을 채택한다. Item의 타입과 items를 구현해야 한다. Item typealias를 정의한다. Item typealias는 section안에 들어갈 item의 타입과 동일하다. public protocol SectionModelType { associatedtype Item var items: [Item] { get } init(original: Self, items: [Item]) } 다중 섹션을 구현할 것이기 때문에 열거형으로 각 section에 들어갈 ..

swift 2022.08.20

RxSwift: Combining operators

startWithobservable이 방출할 요소 앞부분에 다른 요소를 추가하는 연산자. 주로 기본 값이나 시작 값을 지정할 때 사용한다. LIFO 방식이다.let disposeBag = DisposeBag()let numbers = [1, 2, 3, 4, 5]Observable .from(numbers) .startWith(-1, -2) .startWith(-3, -4) .subscribe { print($0) } .disposed(by: disposeBag)/*next(-3)next(-4)next(-1)next(-2)next(1)next(2)next(3)next(4)next(5)completed*/concat2개의 observable를 연결하는 연산자.하나의 observab..

swift 2022.08.19

RxSwift: Delegate proxy

DelegateProxyDelegateProxy란 delegate method를 호출하는 객체와 구독자 사이에 delegate를 대신 처리하는 객체이다. 특정 delegate method가 호출되는 시점에 구독자로 next 이벤트를 전달한다.Delegate Pattern을 사용한 코드를 DelegateProxy를 구현해 Rxswift 형식으로 바꿔보자!// delegate pattern 코드func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { // code}// rxswift 코드let locationManager = CLLocationM..

swift 2022.08.08

RxSwift: Binder

Binder는 UI 바인딩에 쓰는 특별한 Observer이다. 아래와 같은 특징을 가진다.• 에러를 방출하지 않는다.Error가 방출되면 Observable의 시퀀스가 끊기기 때문에 UI 업데이트가 종료되기 때문이다.• 특정 스케줄러를 지정하지 않는 이상 메인 스케줄러에서 동작한다.UI 업데이트는 메인 스케줄러에서 동작하기 때문이다.타입public struct Binder: ObserverTypeObserverType의 제네릭 구조체이다.생성자target : Binder가 확장하는 UI 객체 클래스이다. (ex UILabel...)scheduler : 동작할 스케줄러 기본 값이 메인 스케줄러이다.binding : 보통 Value로 전달된 값을 Target에 있는 속성에 저장하는 클로저.public ini..

swift 2022.08.05

view resizing (ft. keyboard notification)

keyboard가 화면에 나타나거나 사라질 때 등록되는 notification을 이용해 키보드가 textview를 가리는 문제를 해결해보자! Keyboard Notifications When the system shows or hides the keyboard, it posts several keyboard notifications. These notifications contain information about the keyboard, including its size, which you can use for calculations that involve repositioning or resizing views. Registering for these notifications is the only w..

swift 2022.08.04

Rxswift: Connectable Observable Operators

Observable을 공유하게 하는 연산자 Observable은 구독자가 추가되면 항상 새로운 시퀀스를 만든다. 서버와 통신하거나 파일을 읽는 경우에 서로 다른 구독자가 같은 observable을 공유할 수 있도록 하여 불필요한 중복 작업을 피할 수 있다.multicast앞으로 나올 연산자들은 모두 multicast 연산자를 활용하여 만들어진 연산자들이다. multicast는 한 개의 subject를 매개변수로 받는다. source observable이 방출한 이벤트가 매개 변수의 subject로 전달되고 subject는 전달받은 이벤트를 다수의 구독자에게 방출한다. 기존의 observable과 구독자 사이의 1:1 관계에서 중간의 subject로 인해 1:n 관계로 바뀐 셈이다.multicast는 co..

swift 2022.08.02

RxSwift: Transforming Operators

Observable를 변환시키는 연산자toArrayCompleted 이벤트가 방출되면 지금까지 방출된 모든 요소를 하나의 배열로 만들어 Single로 전달하는 연산자이다.Single은 Observable의 하나의 형태로 한 개의 값 또는 에러 이벤트를 방출한다. 그렇기 때문에 구독시 success와 error의 형태로 이벤트를 구분한다.let disposeBag = DisposeBag()let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]let subject = PublishSubject()subject .toArray() .subscribe { event in switch event { case .success(let result): ..

swift 2022.07.31