목록전체 글 (88)
iOS 개발일지

iOS 앱 개발자 데뷔 과정 82회차 #1. Input / Output Input/Output을 통해 ViewModel에 비즈니스 로직을 분리해 데이터의 흐름을 명확하게 구현할 수 있다. Input : View에서 ViewModel로 전달하는 입력 데이터 ex. 버튼의 탭, 텍스트필드에 입력하는 텍스트 등 Output : 입력받은 데이터를 수정/변경하여 View에 표현하기 위한 출력 데이터 ex. 뷰의 상태, 텍스트, 화면 전환, 얼럿 등 - Example (ValidationViewController) - associatedtype Generic과 유사한 형태로, Protocol에서 사용될 타입에 대한 네임스페이스, placeholder 이다. 실제로 Protocol을 채택하여 사용하기 전까지는 사용되..

iOS 앱 개발자 데뷔 과정 81회차 #1. Rx - debug() rx를 통해 코드를 구성할 때, debug() 를 통해 코드의 흐름을 확인할 수 있다. 이 때 debug도 코드의 흐름을 따르기 때문에, debug의 위치에 따라 다른 로그가 출력될 수 있다. - RxAlamofire RxSwiftCommunity 는 RxSwift를 더욱 편리하게 사용할 수 있는 여러 라이브러리를 제공하고 있다. 그 중 RxAlamofire는 이름에서도 알 수 있듯이, 서버 통신을 조금 더 Rx답게 (?) 할 수 있도록 도와준다. 기본적으로 Alamofire에 의존하고 있기 때문에, RxAlamofire를 설치할 경우 자동으로 Alamofire도 설치된다. - RxDataSources RxDataSources는 tabl..

iOS 앱 개발자 데뷔 과정 79회차 #1. Checklist - Share 일반적으로는 subscribe (bind) 를 할 때마다 새로운 시퀀스가 생성된다. 즉, 하나의 Observable을 subscribe (bind) 하는 곳이 여러 군데라면, 그만큼 호출이 되면서 스트림이 생기게 되기 때문에 불필요한 리소스가 발생할 수 있다. share() 를 통해 이를 해결할 수 있으며, subject와 relay는 내부적으로 스트림을 공유하기 때문에 따로 지정해 줄 필요가 없다. - subscribe vs bind vs drive 78회차 정리 Observable 참고 subscribe : next, complete, error 이벤트를 받을 수 있다. bind : next 이벤트만 받을 수 있으며, Mai..

iOS 앱 개발자 데뷔 과정 78회차 #1. Checklist - Relay - Subject & Relay Subject는 이벤트에 대한 emit과 subscribe를 모두 할 수 있는, Observable과 Observer가 합쳐진 객체이다. (77회차 참고) 하지만 보다 더 UI에 적합한 형태가 필요했고, Subject를 내부에서 Wrapping해 Relay를 제공하게 된다. Relay는 PublishRelay, BehaviorRelay 두가지가 있고, Subject와 거의 유사한 특성을 가지고 있다. Subject와 Relay의 가장 큰 차이는 Relay의 경우 Completed와 Error 이벤트를 받지 못한다는 것이다. UI가 Error와 Completed 이벤트를 받으면 더이상 next 이벤..

iOS 앱 개발자 데뷔 과정 77회차 #1. Checklist - Operator - repeatElement & take - interval - debounce 타이머를 설정한 후, 타이머가 끝난 시점에 가장 최근의 값을 방출한다. 이벤트가 방출될 때마다 타이머가 초기화된다. - distinctUntilChanged 연달아 중복된 값을 전달받을 경우 무시한다. - withUnretained 약한 참조를 갖기 위한 [weak self] 대신 사용할 수 있으며, subscribe 클로저의 첫 번째 파라미터로 받아온다. - Subject - Observable vs Subject Observable은 이벤트를 생성하고 전달하기만 할 뿐, 새로운 값을 Observable에 추가할 수 없다. 사용자의 입력 등에..

iOS 앱 개발자 데뷔 과정 76회차 #0. RxSwift Github : https://github.com/ReactiveX/RxSwift Documentation 번역 : https://github.com/fimuxd/RxSwift #1. Checklist - Sequence Protocol https://developer.apple.com/documentation/swift/sequence Array, Dictionary, Set과 같은 Collection 타입의 기반이 되는 프로토콜이며, Sequence 프로토콜에 부합하는 타입은 for...in 순환문으로 반복 순회가 가능하다. - Iterator Protocol https://developer.apple.com/documentation/swif..

iOS 앱 개발자 데뷔 과정 74회차 #1. MVVM 74회차의 코드는 MVVM 입문을 위해, 간단하게 CObservable 클래스를 만들어 사용했다. 주의 !! bind 코드는 꼭 dataSource 초기화 코드보다 아래에 작성되어야 한다. - NewsViewController MVVM의 기본적인 흐름을 이해하기 위해 간단한 기능을 두 가지 구현했다. 두 기능은 편의상 한 뷰에 구현했을 뿐, 전혀 연관이 없다. 첫번째로는, textField에 숫자를 입력하면 3자리마다 자동으로 콤마가 찍히는 기능이다. textField의 addTarget 이벤트를 editingChanged으로 설정해, text가 변경될 때마다 numberTextFieldChanged 를 호출한다. 그리고 viewModel에 pageN..

iOS 앱 개발자 데뷔 과정 73회차 #1. DiffableDataSource iOS 13 이상부터 사용 가능한 DiffableDataSource는 사용자 경험을 위한 애니메이션 구현이 쉽고, IndexPath도 사용하지 않는다. 참고) 기존 DataSource 방식 - Snapshot snapshot은 현재 UI State에 대한 truth를 말하며, 자기 자신만의 버전을 가지고 있다. snapshot을 통해 컬렉션뷰/테이블뷰에 데이터를 제공하고, snapshot을 통해 데이터의 변경 사항들을 확인한다. apply() 메서드를 통해 IndexPath에 대한 연산, 섹션이나 셀 추가, 삭제, 이동 등을 수행하게 된다. - Hashable (feat. UUID) 데이터 중복을 허용하고 싶다면, Model에..