Rx는 MVVM 디자인 패턴에 특화되어있다. 한 쪽 방향으로 쉽게 Observing 할 수 있는 구조로 되어있기 때문이다. RX 와 MVVM를 같이 사용할 때의 장점 MVVM 패턴을 사용하게 되면 ViewModel로 비지니스 로직을 분리할 수 있게 되고, test를 쉽게 할 수 있다는 있다. 또한, 보통 프론트와 모바일 파트는 기획 및 설계가 이루어지면 디자인, 백엔드(서버)의 개발이 이루어진 후 개발을 들어간다. 하지만 MVVM 패턴을 이용하게되면 목업정도의 데이터 구조와 API 구조를 알고 있다면 먼저 개발을 진행하고 완성된 개발 스펙에 맞게 converting이 가능하도록 해준다. 예를 들어, API요청을 Rx를 사용하지 않고 callback(completion: @escaping) 형태를 사용해 ..
RxCocoa 란? UIKit의 View에 RxSwift 요소들을 Extension으로 접목시킨 라이브러리 Bind subscribe에서 onNext로 오는 값을 대입해주는 것. 순환참조 없이 사용할 수 있다. binder binding 할 수 있는 타입 subscribe와의 차이점은, Error의 컨트롤 가능여부 이다. UI는 반드시 MainThread에서 동작해야하므로 항상 observeOn(MainScheduler.instance)를 추가 해주어야한다. onError, onCompleted, 그리고 dispose가 되면 스트림이 끊어지게 된다. 비지니스 로직에서는 에러와 완료 처리가 필요하지만, UI에서 스트림이 끊어지면 다시 그 UI를 사용하지 못하게 되므로 주의 해야한다. catchErrorJu..
Subject란? 기존의 Observable 타입의 스트림은 한번 스트림을 생성하면 그 후에 스트림에 이벤트를 추가하는 것이 불가능 합니다. 하지만 Subject는 가능합니다. Subject로 스트림을 생성하게 될 경우, subscribe한 후에도 해당 Subject에 onNext로 이벤트를 보내는 것이 가능해집니다. 즉, Observable과 Observer 역할 모두 가능한 타입 입니다. Subject 종류 PublishSubject, BehaviorSubject, ReplaySubject, AsyncSubject가 있습니다. PublishSubject 스트림이 빈 상태로 시작합니다. 새로운 이벤트가 추가되면 추가 되는 시점에 Subscribe하고 있는 스트림에만 이벤트가 전달 됩니다. Behavio..
RxSwift에서 가장 중요한 요소 중 하나인 Observable에 대해 알아보겠습니다. Observable란? 구독할 수 있는 스트림 형태의 값, 해당 값을 생성시에 들어오는 값을 Observer가 관찰하고 있다가 값을 방출해준다. 사실 개념만 봐서는 이해가 잘 안될 수 있습니다. Observable을 공부해본 결과 Observer와 Observable이라는 개념이 존재합니다. Observer는 값을 관찰하고 있다가 스트림으로 값을 보냅니다. Observable는 받을 수 있는 값들을 모아 스트림을 만들고 해당 값을 가지고 있습니다. Observer에도 2가지 형태의 Observer가 존재 합니다. 첫번째는, Observable 생성시에 값이 들어오는 것을 추적하는 Observer. 값이 들어오면 방..
RxSwift에 대한 공부를 시작하려고 합니다. 먼저 왜 RxSwift를 사용해야하는지, 왜 RxSwift에 관심을 갖게 되었는지 말씀드리고자합니다. 네트워크를 통한 데이터 통신이 잦아지면서 비동기 처리를 해야했고, 탈출 클로저(@escaping)을 통한 completionHandler 처리를 해주어야 했습니다. 하지만 비동기 처리의 중첩 등의 이유로 탈출 클로저를 통한 함수 생성은 복잡하기도 하고 사실 매번 만드는데 조금 귀찮아지기도 했습니다.... 그래서 비동기 처리를 쉽고 간결하게 할 수 있는 방법을 찾아보던 도중 비동기 프로그래밍을 위한 라이브러리를 알게 되었습니다. 비동기 프로그래밍을 위한 라이브러리는 대표적으로 Promise, Bolt, RxSwift 이 있습니다. UIKit과 함께 사용됩니다..
상황: Tab Bar의 높이와 위치를 변경해주기위해 관련 프로퍼티의 값 수정이 필요했다. 문제점1: viewDidLoad에서 UI가 변경되지 않는다. 해결 방법1: viewWillLayoutSubviews 에 관련 프로퍼티의 값을 수정하였더니 UI가 정상적으로 변경되었다. 문제점2: 다른 ViewController를 띄웠다가 다시 Tab Bar가 있는 View로 돌아오면 높이와 위치가 원래대로 돌아가는 현상이 발생했다. 해결 방법2: viewWillLayoutSubviews는 다른 ViewController를 present, push, dismiss 뷰 계층에 변화가 있을 때 불러와지는 메소드이다. 그러다보니 뷰가 원래의 모습으로 돌아가는 듯했다. 그래서 Custom TabBarController Cla..
상황: String으로 받은 전화번호를 바로 전화 연결이 가능하도록 한다. 문제: String이 숫자로만 이루어져있으면 문제가 없지만 특수문자가 포함되어 있는 경우가 있다. 해결방법: 처음에는 replacing(of:with:)로 처리하려고 했지만 특수문자의 모든 경우를 예외처리하는 것은 거의 불가능에 가깝다는 것을 깨닫고 고차함수인 filter로 숫자만 담기로 했다. var number: String = “00)000-000” number.filter { Int(String($0)) != nil }
PickerView를 textField를 통해 사용하려 시도했습니다. 하지만 외부로부터 textField에 입력을 완전히 막으면서 PickerView를 사용하는 방법은 찾기 힘들었습니다. textField에 내용을 입력시키지 않기위해 user Interaction Enable을 false하게 되면 이벤트가 발생하지 않아 PickerView를 띄울 수 없었고 그렇다고 그냥 사용하면 PickerView로 인해 키보드는 나오지 않지만 붙여넣기 등으로 값을 변경 가능했습니다. 그래서 생각한 방법이 textField 대신 UIButton을 통해, 외부의 입력을 막으면서 PickerView를 사용하는 것입니다. 의아해 하실 수 도 있지만 방법은 이러합니다. 모든 UI 요소는 storyboard로 진행했습니다. 1...
- Total
- Today
- Yesterday
- subject
- provisioning profile
- 프로파일
- ios
- remote
- MVVM
- 코드사이닝
- notification
- Clean Architecture
- TextField
- rxcocoa
- RxSwift
- 코테
- certificate
- MVC
- relay
- Rx
- 아키텍처
- Apple
- 동적계획법
- 클린아키텍처
- Crossing Boundaries
- APNS
- 프로비저닝 프로파일
- CSR
- TabBar
- Push
- Swift
- dip
- 프로비저닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |