일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ios
- tableView
- SWIFT
- 스위프트
- 애니메이션
- HIG
- 클린 코드
- clean architecture
- Observable
- Human interface guide
- MVVM
- UITextView
- collectionview
- map
- 리팩토링
- uitableview
- Refactoring
- swift documentation
- swiftUI
- Protocol
- combine
- rxswift
- UICollectionView
- 리펙터링
- 리펙토링
- RxCocoa
- uiscrollview
- Clean Code
- ribs
- Xcode
- Today
- Total
목록RxSwift/RxSwift 응용 (14)
김종권의 iOS 앱 개발 알아가기
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..
MVVM ViewModel은 데이터를 바꾸기만 함 (View에 어떤 화면을 그러야 하는지 안알려주고, View가 subscribe하고 있음) 그냥 데이터만 갖고 그 값만 바꾸고 있는 애 UI에 관한 요소는 건들지 않음 —> bug가 발생할 위험은 UI가 아니라 logic적인 부분이므로,, 버그가 발생할 확률이 줄어듦 Testable이라는 것은 UI정보가 없어야 가능 정리 ViewContoller : UI에 대한 업데이트만 관리, view model을 subscribe하면서 UI업데이트 view model : logic에 대한 것만 관리 비교) 1. recall - View에서 커멘드를 입력 받아, ViewModel에서 데이터를 가공하여 View에 바인딩 - ViewModel쪽에 Reactive로 만들어서..
1. 세팅 1) pod 'RxAlamofire' 설치 2) 앱 내에서 ATS설정 (안할시 request불가) 2. 사용 1) json request 주의 할 점 : disposeBag을 viewDidLoad에 놓으면, viewDidLoad가 사라질 시, dealllc되므로 response되기 전에 종료됨 let disposeBag = DisposeBag() // 전역변수에 두지 않으면, response되기 전에 종료 // 먼저 ATS 설정 할 것 let urlString = "http://friendservice.herokuapp.com/listFriends" json(.get, urlString) .debug() .subscribe(onNext: { print($0) }) .disposedBag(by:..