개발/Swift
-
Rxswift - ObserveOn , SubscribeOn개발/Swift 2022. 11. 18. 16:03
Observable의 쓰레드를 변경시키는 두가지방법이 있다. 일반적으로 별도의 설정 없이는 “구독한 시점에서의 쓰레드” 를 사용한다. //Main Thread에서 productList Observable 생성 output.productList .bind(to: productListTableView.rx.items(cellIdentifier: "ProductListCell", cellType: ProductListTableViewCell.self)) {[weak self] (_, element, cell) in print("Thread.isMainThread \\(Thread.isMainThread)") //→ 메인스레드 true cell.configure(id: element.id, nameKo: ele..
-
Rxswift 에러 핸들링 (complete, dispose 대응)개발/Swift 2022. 11. 18. 14:19
네트워크 통신 에러 핸들링에서 필요한 요구사항은 이러하다 에러 발생시 Viewcontroller 에서 인지하고 알맞은 에러메시지를 띄운다. 에러가 발생해도 원하는 때에 다시 재시도 할수 있어야 한다. Rx 에서 에러가 발생하면 observable 체인은 dispose되고 이후에 성공이 발생하도 동작 하지 않는다. 일반적인 해결법은 catch가 있으나 catch 또한 complete 로 이벤트가 종료된다. //VM let productList = PublishSubject() productList.onError(error) productList.onNext(data) ///VC output.productList .catch({ error in self.present(Dialog.getDialog(title..
-
[Combine] - 1. publisher & subscriber개발/Swift 2022. 11. 13. 16:13
기본적인 Notification publisher - subscribe 구현 이다. override func viewDidLoad() { super.viewDidLoad() let notiName = Notification.Name("Noti") //publisher 를 생성 let publisher = NotificationCenter.default.publisher(for: notiName) //구독 let subscribe = publisher.sink { _ in print("NotiNoti") } //이벤트 방출 NotificationCenter.default.post(name: notiName, object: nil) //구독 취소 subscribe.cancel() } Subscriber 구현..
-
Rxswift operators - flatmap, flatmapLatest, merge개발/Swift 2022. 11. 11. 13:39
참조 : http://adamborek.com/thinking-rxswift/ Flatmap 검색결과에 따라 API 호출후 노래 리스트를 응답 받아 그려야하는 상황이다. Observable -> Observable -> Observable: 그러면 이런 흐름으로 map operator를 사용하여Observable을 전달받아 처리하면 된다. 그러나 검색어에 대한 bservable 은 동기적이고 Observable 은 API응답이므로 비동기적이다. flatmap을 사용해 해결할수있다. searchBar.rx.text.orEmpty.flatmap { query in return API.fetch(query:query) // Observable 리턴 해야함 } Observable 을 응답값으로 받는 방법은 여기..
-
Combine Vs RxSwift개발/Swift 2022. 11. 9. 14:46
참조: https://medium.com/@M0rtyMerr/will-combine-kill-rxswift-64780a150d89 콤바인 프레임워크는 WWDC2019에 발표되었다. Backpressure(배압) 화장실의 변기가 역류하는일을 보게된다. 그것은 배압때문이다. 배압은 파이프를 통한 흐름에 반하는 저항을 말한다. Observable이 발행하는 데이터가 워낙 많아서 Observer가 소화하지 못하면 메모리가 overflow 가 발생하게 된다. RxSwift는 Backpressure를 해결한 Flowable이 없다. TypedError Rx 는 Error 타입 만으로 충분하다한다. Combine 에서는 Publisher error 타입을 제공해야한다. Disposebag disposebag은 하나의..
-
Apollo swift + Rxswift 를 활용한 API 네트워크와 에러처리개발/Swift 2022. 11. 3. 12:57
ApolloClient 구현 Network 라는 싱글톤 클래스를 만들고 ApolloClient 객체를 생성해야한다. final class Network { static let shared = Network() private(set) lazy var apollo: ApolloClient = { guard let url = URL(string: APIURL), let uuid = UIDevice.current.identifierForVendor?.uuidString else { fatalError("Create Apollo Client Error")} let store = ApolloStore() let interceptorProvider = NetworkInterceptorsProvider( interce..
-
[Swift] URLSession 통해 async fetch & json 파싱개발/Swift 2022. 10. 4. 09:01
HTTP 메소드, JSON 파싱 http 통신을 위해 URLSession을 사용해보고 얻어온 데이터를 원하는 정보만 디코딩해서 사용하려 한다. class Network { func fetchTrends() { guard let url = URL(string: "") else { return } var request = URLRequest(url: url) request.httpMethod = "GET" URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Error fetch Trend", error.localizedDescription) } print(data) } } } 우선 데..
-
[Swift] ViewController Custom Init (parameter 전달)개발/Swift 2022. 8. 29. 16:35
Modern Collection View 와 MVVM 패턴 가이드 [iOS] Modern Collection View & MVVM 패턴 가이드 - 인프런 | 강의 MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자재로 다룰 수 있게 됩니다., - 강의 소개 | 인프런 www.inflearn.com ViewController Custom Init (parameter) 코드로 UI 를 짜는경우는 이렇게 사용할수있다. init(viewModel: MonitoringViewModel) { self.monitoringViewModel = viewModel super.init(nibName: nil, bundle: nil) }..