개발/Swift
-
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) }..
-
[Swift] 라이브러리 내부 이미지 관련 오류개발/Swift 2022. 8. 25. 16:32
라이브러리 이미지 관련 오류 두개의 어플리케이션에 중복적으로 사용되는 view 들이 많아 중복되는 view와 관련해 라이브러리를 만들어 두 어플리케이션에서 사용하기로 했다. 그렇게 라이브러리화 작업을 끝낸후 기존 프로젝트에서 이제 더이상 사용하지 않을 image 파일들을 모두 제거하자 image를 찾지 못하는 문제가 생겼다. 그렇다고 image를 다시 넣는것도 문제였다. 다시 넣는다면 App(현재 프로젝트)와 라이브러리에서 모두 image 파일을 가지고있기 떄문이다. 해결은 Bundle을 통해 가능했다. button.setImage(UIImage(named: "buttonImage"), for: .normal) 보통 이렇게 이미지를 사용한다. 이런경우 프로젝트 에서는 프로젝트 의 리소스를 보고 butto..
-
[Swift] 특정 코너만 CornerRadius 적용시키기개발/Swift 2022. 8. 22. 16:26
특정 코너만 CornerRadius 적용시키기 흔히 view에서 cornerRadius를 적용시키기 위해 이렇게 사용하고있었다 extension UIView { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } set { layer.cornerRadius = newValue layer.masksToBounds = newValue > 0 } } } self.view.cornerRadius = 8 위와같이 사용하면 각각 코너 모두 둥글게 Radius가 적용된다 하지만 만약 특정 코너만 ( 왼쪽위 or 왼쪽아래) 적용시키기 위해서는 다른 방법이 필요하다 extension UIView { func roundCorners(co..
-
[Swift] Superview 의 tap gesture 적용시 sub view에 영향 안주기개발/Swift 2022. 8. 19. 16:24
Modern Collection View 와 MVVM 패턴 가이드 [iOS] Swift Modern Collection View & MVVM 패턴 가이드 | 덤벨로퍼 - 인프런덤벨로퍼 | MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자재로 다룰 수 있게 됩니다., Swift iOS UI, 제대로 다루는 핵심 기술! 📲 iOS Swift 레이www.inflearn.com Superview 의 tap gesture sub view에 영향 안주기private func setDismissKeyboardEvent() { let gesture = UITapGestureRecognizer(target: self..