일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RxCocoa
- uitableview
- Human interface guide
- uiscrollview
- combine
- swiftUI
- ios
- ribs
- rxswift
- clean architecture
- Observable
- UICollectionView
- SWIFT
- 클린 코드
- Xcode
- 애니메이션
- Refactoring
- Clean Code
- 리펙터링
- 리펙토링
- 리팩토링
- collectionview
- swift documentation
- MVVM
- tableView
- HIG
- Protocol
- map
- 스위프트
- UITextView
- Today
- Total
목록RxSwift (40)
김종권의 iOS 앱 개발 알아가기
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. RxCocoa란? 다양한 protocol을 extension한 것들과 UIKit을 위한 rx영역을 제공하는 프레임워크 RxCocoa는 단방향성을 갖음 - Producer는 값을 생성하고, Consumer는 값을 처리 * 이벤트를 발생하는 producer가 처리하는 consumer에게 bind(to:)시키는 것이 중요 2. 사용 1) RxCocoa없이 생성 import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! // 테이블뷰 데이터 let items = ["1", "2", "3", "4", "5"] // 섹..
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:..
1. Observable 1) 용어 - Observable : 관측(subscribe)되는 대상 - Observer (=subscriber) : Observable을 구독(subscribe)하는 주체 - emit : Observable이 이벤트를 방출하는 것 2) Observable에 이벤트 생성 - .just(value) - .of(value1, value2, ...) - .from([Element]) : 오직 array타입만 가능, 원소 모두 하나씩 emit - .create() : 클로저 형식, 다양한 값 생성 가능 Observable.create { observer in observer.onNext(1) observer.dispose() } 3) Subscribe method Observer가 O..
* 사용 : 쓰레드와 병렬처리를 다룰 때 1. Scheduler 개념 1) 정의 프로세스가 있는 곳의 context (여기서의 context = thread, dispatch queue) 2) 사용 한 Context에서 cache 연산자를 이용하여 전달 2. 연산자 1) subscribeOn(_:) Observable의 프로세싱이 어디서 일어나게 할 것인지 결정하는 연산자 let fruit = Observable.create { observer in observer.onNext("[apple]") sleep(2) observer.onNext("[pineapple]") sleep(2) observer.onNext("[strawberry]") return Disposables.create() } let gl..
1. Buffering Operators 1) share(replay:), share(replay:scope:) 과거의 이벤트들을 subscriber에게 emit - replay 파라미터 : 버퍼사이즈 (얼마만큼의 element를 새로운 subscriber에게 emit할 것인지 - scope 파라미터 : subscriber의 수가 1에서 0으로 될 때 다음 동작 .whileConnected : 공유되고 있던 stream의 cache삭제 .forever : stream의 cache를 삭제하지 않음 이밖의 메소드 - replay(_:) - replayAll() - multicast(_:) - publish() 2. Time-shifting operators 이벤트 emit에 delay를 시킬 수 있는 연산자..
Share() 연산자는 자원을 공통으로 사용 할 수 있게끔 하는 개념 1. Share을 쓰는 이유 1) MVVM설계 // ViewModel 정의 class SomeViewModel { let result = userTappedButton .flatMapLatest {apiService.rx.getFriend() } name = result.map {$0.name} phone = result.map {$0.phone} } // ViewController에서 ViewModel과 UI연결 class { ... viewModel.name .bind(to: lblName.rx.text) // UI와 ViewModel간의 연결 .disposed(by: bag) viewModel.phone .bind(to: lblP..
1. Prefixing and concatenating - Observable끼리 합치는 것 1) startWith(value) - 기존 리스트에 첫 번째에 추가 example(of: "startWith") { // 1 let numbers = Observable.of(2, 3, 4) // 2 let observable = numbers.startWith(1) _ = observable.subscribe(onNext: { value in print(value) }) } 2) concat([]) example(of: "Observable.concat") { // 1 let first = Observable.of(1, 2, 3) let second = Observable.of(4, 5, 6) // 2 let..