일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클린 코드
- map
- Refactoring
- combine
- Human interface guide
- swift documentation
- Xcode
- Protocol
- uitableview
- UITextView
- rxswift
- MVVM
- swiftUI
- RxCocoa
- 애니메이션
- HIG
- 스위프트
- 리펙토링
- SWIFT
- tableView
- 리팩토링
- ios
- clean architecture
- Clean Code
- collectionview
- UICollectionView
- ribs
- uiscrollview
- Observable
- 리펙터링
- Today
- Total
목록RxSwift (40)
김종권의 iOS 앱 개발 알아가기
share * 원래 Observable은 subscribe될 때만 create클로저를 호출하여 Observable을 생성 (== subscribe한 횟수만큼 새로운 시퀀스 생성) // API를 요청, 결과를 반환하는 시퀀스라 가정 let networkRequestAPI = Observable.of(100) let result = requestMoreButton.rx.tap .flatMap { networkRequestAPI } result .map { $0 > 0 } .bind(to: requestMoreButton.rx.isHidden) .disposed(by: bag) result .map { "Count:\($0)" } .bind(to: remainCountLabel.rx.text) .dispose..
merge 단순히 모든 event를 결합 (단 순서는 번갈아 가며) let disposeBag = DisposeBag() let first = Observable.of(1, 2, 3) let second = Observable.of(4, 5, 6) Observable.merge(first, second) .subscribe(onNext: { print($0) }) .disposed(by: dispseBag) /* Prints: 1 4 2 5 3 6 */ combineLatest 여러 소스 중에서 단 한 가지라도 이벤트를 방출하면, 각각 소스의 맨 마지막 값을 뽑아서 새로운 값을 방출 한 번 값을 방출한 이후에는 클로저가 각각의 Observable이 방출했었던 최신 값을 받음 - ex) 이메일과 비밀번호가..
debounce 입력 -> 바로 입력 안되고 대기 -> 일정 시간 후 입력 주로 텍스트 필드 입력에 사용 코드 (쉬운 예시를 위해서 버튼 입력에 적용) btnDebounce.rx.tap.asDriver() .debounce(.seconds(3)) .drive(onNext: { (_) in self.debounceCount += 1 self.lblDebounce.text = "\(self.debounceCount)" }).disposed(by: disposeBag) throttle 입력 - > 바로 입력 -> 대기 주로 버튼 중복 입력 방지에 사용 코드 btnThrottle.rx.tap.asDriver() .throttle(.seconds(3)) .drive(onNext: { (_) in self.thro..
개념: 연달아 중복된 값이 올 때 무시 Observable.of(1, 2, 2, 1, 3) .distinctUntilChanged() .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) /* Prints : 1 2 1 3 /*
1. flatMap - Observable관련 이벤트를 받아서, 새로운 Observable 방출 let sequenceInt = Observable.of(1, 2, 3) let sequenceString = Observable.of("A", "B", "C", "D") sequenceInt .flatMap { (x: Int) -> Observable in print("Emit Int Item : \(x)") return sequenceString } .subscribeNext { print("Emit String Item : \($0)") } // Output Emit Int Item : 1 Emit String Item : A Emit String Item : B Emit String Item : C E..
Delegate Proxy란? delegate를 사용하는 부분을 RxSwift로 표현할 수 있도록 하는 것 * 원리 : DelegateProxy.swift 파일과 DelegateProxyType.swift 이용 * Delegate개념 : 함수 실행위치를 미리 선언해 놓고, 구현은 직접 하라고 delegate시키는 것 -> (protocol로 선언) import UIKit import RxSwift import RxCocoa protocol MyDelegate { func willStart() func end() } class UISomething: NSObject { var delegate: MyDelegate? = nil func start() { delegate?.willStart() // 이 함수를..
custom extension이란? 객체.rx.함수접근이 가능하게끔 표현 첫 번째 방법, Binder * Oberver only (Observable처럼 값을 받아서 처리한다는 개념이 아닌, 함수처럼 안에서 수행하라는 의미) * Main Scheduler에서 수행하는 것이 default class ViewController: UIViewController { let bag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() let obs = Observable.of(true) rx.myCustom.onNext(false) // observer라 가능 rx.myCustom.subscribe // observer라 불가능 obs.asDriver..
RxCocoa UI Control과 다른 SDK 클래스를 wrapping한 커스텀 extension set ObserverType : 값을 주입 시킬 수 있는 타입 ObservableType : 값을 관찬할 수 있는 타입 1. ControlProperty subject와 같이 프로퍼티에 새 값을 주입시킬 수 있고(ObserverType), 값의 변화도 관찰할 수 있는 타입(ObservableType) Ex) 2. Binder ObserverType을 따름 (값을 주입시킬 수는 있지만, 값을 관찰할 수 없음) (error를 값으로 받을 수 없음, error가 주입되면 fatalError발생) 3. Traits RxCocoa의 Trait(UI작업시 코드를 쉽고 직관적으로 작성해 사용할 수 있도록 도와주는 특..