일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리펙터링
- 리팩토링
- HIG
- MVVM
- 클린 코드
- 스위프트
- UITextView
- Clean Code
- Observable
- ios
- Human interface guide
- SWIFT
- UICollectionView
- combine
- tableView
- RxCocoa
- swift documentation
- swiftUI
- 리펙토링
- 애니메이션
- rxswift
- clean architecture
- collectionview
- Refactoring
- uiscrollview
- Protocol
- ribs
- map
- Xcode
- uitableview
- Today
- Total
목록RxSwift/RxSwift 기본 (17)
김종권의 iOS 앱 개발 알아가기
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..
1. URL API REQ 1) map을 이용하여 원소에 접근하여 최종적으로 URLRequest획득 // viewDidLoad().swoft DispatchQueue.global(qos: .default).async { [weak self] in let response = Observable.from([repo]) .map { urlString -> URL in return URL(string: "https://api.github.com/repos/\(urlString)/events")! }.map { url -> URLRequest in return URLRequest(url: url) } } 2) flatMap을 이용하여 새로운 Observable생성 *map이 아닌 flatMap을 사용하는 이유 -..
1. Transforming elements 1) toArray - 개별 원소들 -> 하나의 배열로 example(of: "toArray") { let disposeBag = DisposeBag() Observable.of("A", "B", "C") .toArray() .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) } // prints : ["A", "B", "C"] 2) map 이벤트를 mapping하여 주어진 식을 통해 새로 변경 example(of: "map") { let disposeBag = DisposeBag() // 1 let formatter = NumberFormatter() formatter.numberStyle = .spel..
1. 구독을 공유해서 사용하는 방법 (Sharing subscriptions) 구독을 공유하는 주체 : Observable 1) 공유해서 사용하지 않은 경우의 문제점 여러 곳에서 subscribe()를 사용한다면 동기화에 문제 발생 var start = 0 func getStartNumber() -> Int { start += 1 return start } let numbers = Observable.create { observer in let start = self.getStartNumber() observer.onNext(start) observer.onNext(start+1) observer.onNext(start+2) observer.onCompleted() return Disposables.cr..
구독 요청시, filtering하는 연산자를 넣어서 이벤트(onNext)들을 filter하여 선택적인 emit을 하기위한 연산자 1. Ignoring operators 1) ignoreElements() - next이벤트 금지 필터 (completed, error는 사용가능) /// ignoreElements example(of: "ignoreElements") { // 1 let strikes = PublishSubject() let disposeBag = DisposeBag() // 2 strikes .ignoreElements() .subscribe { _ in print("You're out!") } .disposed(by: disposeBag) strikes.onNext("X") // print..
* 실습할 프로젝트의 내용은 여기를 참조하여 다운로드 네비게이션 버튼 중 "+"버튼을 통해 이미지를 추가하며, save버튼을 추가 할 수 있도록 하는 것 RxSwift접근(BehaviorRelay와 PublishSubject이용)하여 구현해야될 내용 - "+"버튼을 누를 시 앨범으로 이동하는 기능, 선택시 뷰에 반영 - save버튼은 이미지가 있는 경우만 활성화 - 이미지를 선택할 때마다, 네비게이션 아이템 타이틀에 현재 입력한 총 이미지 갯수 표현 - save버튼을 누르면 저장되게끔 1. dispose bag view controller이 dispose bag을 소유하고 있기 때문에, dispose의 ARC가 0이 될때, observable subscription들은 같이 disposed됨 (Rx su..
1. Subjects란? (실제 앱 구동시) run time시에 Observable에 값을 추가하여 emit이 발생하게끔 해주는 대리인 Observable에 값을 추가하는 대상은 Observer라 부르며(추상적인 개념), Observable과 Observer 기능을 둘 다 하는 것이 바로 Subjects.( subscriber가 아님을 주의) ex) PublishSubjects는 일종의 출판사와 같은 작업 -> 출판사에서 "Is Anyone Listening?"이란 내용 받음(.onNext) -> 구독(.subscribe) -> 현재 벌어진 일만 emit함(.subscribe했을 경우 "Is anyone listening?"은 과거에 발생했던 일이라 emit하지 않음) -> 뒤에 1과 2 이벤트 추가시(..
1. Observables관련 용어 및 기능 * Observable이란 여러 이벤트들을 생성(="emit")할 수 있는 대상 * sequence 란? * Observable == Observable sequence == sequence "observable"을 "sequence"라고 부르는 이유? 1) next : 구성요소를 계속해서 방출시킬 수 있는 기능 (=observable구독자에게 데이터 전달) 2) completed : 이벤트를 종료시킬 수 있는 기능 (=observable구독자에게 완료되었음을 알림) - 그림에서 끝에 막대기가 세로로 있는 것(이미 일이 끝난 상태) 3) error : 이벤트에 오류가 있음을 알고 중간에 종료시킬 수 있는 기능(observable구독자에게 오류를 알림) - 이벤..