전체 글(39)
-
082_Rx(Input, Output)+MVVM
-. 뷰모델을 통해 UI로직과 비지니스 로직을 분리하면 객체, 이벤트가 많아졌을때 쉽게 확인 할 수 있다. 이 때 Input, Output으로 데이터 흐름을 구분 할 수 있다. -. VC->VM : Input(버튼탭, 텍스트필드 입력하는 텍스트 등), VM->VC : Output(뷰 상태, 텍스트, 화면전환, 얼럿 등) -. Input, Output 사용 전에는 뷰컨트롤러에서 이벤트를 처리했지만 Input을 사용해서 관찰대상이 되는 이벤트의 처리를 뷰모델에 전달하고, 뷰모델에서는 Output을 사용해서 연산을 적용한 이벤트를 뷰컨트롤러에 전달한다.(뷰컨틀롤러에서는 메서드의 반환값을 통해 값에 접근할 수 있음 ex.뷰컨트롤러에서 transform의 반환값인 Output구조체의 매개변수에 접근) Input,..
2022.11.01 -
2차 평가과제_Memo App Project
앱 만들면서 어려웠던 부분 정리한다. 내용은 앱 개선하는대로 계속 추가될 예정이다. #. 메모 수정 문제 수정을 위해 기존데이터를 받아오는 과정이 어려웠음. ListVC에서 선택한 셀이 가진 데이터를 넘겨줘야 했는데 realm테이블을 전달해도indexPath를 처리할 방법에서 막혔음. 해결방법 1) realm테이블이 아니라 애초에 인덱싱이 되어있는 레코드를 전달해서 처리(note[indexPath.row]가 note테이블의 record기 때문에 이 값을 EditorVC에 넘겨줌) 2) ListVC-didSelectRowAt에서 indexPath.row값을 EditorVC에 넘겨준다. 그리고 EditorVC에서 realm테이블에 접근한 뒤indexPath.row값으로 인덱싱해서 처리. func tableV..
2022.10.30 -
43_Login, Lotto Examples(Observable+MVVM)
Observable타입의 값을 변경했을 때 Observable에 저장된 메서드가 자동실행되는 구조를 정리해본다. class LoginViewModel { var name: Observable = Observable("") //반응형으로 타입설정 } -. 뷰모델에 Observable로 초기화된 name프로퍼티 viewModel.name.bind { text in self.nameTextField.text = text } -. viewModel의 name프로퍼티를 통해 Observable클래스의 bind메서드를 실행하면 bind에서 클로저로 받은 값을 사용 -. name프로퍼티 값이 바뀔때마다 bind가 실행되는 이유? -> bind메서드에서 listener에 클로저를 저장했고 그것을 value에 대한 di..
2022.10.25 -
074_MVVM+DiffableDataSource(Unsplash: Get a random photo)
#. 체크리스트 1. Codable사용할 때 옵셔널 타입 체크하기: Observable.value를 nil로 초기화 하려면 옵셔널 타입이어야 함. 2. snapshot.appendItems()에 클로저값 넣을 때 viewDidLoad보다 Codable이 먼저 실행(서치바검색어가 전달되지 않은 상황)됨. 결국 스냅샷에 nil을 넣는 상황이 되기 때문에 nil이 아닌 경우에 bind메서드 실행하도록 분기 처리 해줘야함. 1. struct RandomPhoto: Codable, Hashable { var description: String? var urls: randomPhotoUrls? } // MARK: - randomPhotoUrls struct randomPhotoUrls: Codable, Hashab..
2022.10.22 -
074_MVVM+DiffableDataSource(숫자입력, 검색이미지)
-. iOS 13에서 나온 CollectionView API(DiffableDataSource, Compositional Layout)를 기반으로 iOS14에서 Section Snapshot, List Configuration이 새로 나왔다. 이를 사용하여 테이블뷰처럼 생긴 컬렉션뷰를 만들 수 있다. -. MVVM이란 M-V-VM 세 개 레이어로 나누어 코드를 작성하는 방식으로 뷰모델을 통해 UI와 비지니스 로직을 분리하는게 핵심이다. *M(Model): 데이터 담당, VM(View Model): 비지니스로직 담당, V(View): UI담당 #. MVVM흐름: 데이터 초기화를 뷰모델에서 처리하고, 그 데이터를 뷰컨트롤러가 받아서 작업을 실행한다. 1. 레이아웃 설정: UICollectionViewLayo..
2022.10.21 -
073_DiffableDataSource(테이블뷰스타일 컬렉션뷰)
iOS 13에서 나온 CollectionView API(DiffableDataSource, Compositional Layout)를 기반으로 iOS14에서 Section Snapshot, List Configuration이 새로 나왔다. 이를 사용하여 테이블뷰처럼 생긴 컬렉션뷰를 만들 수 있다. #. 테이블뷰 스타일 컬렉션뷰 흐름(Diffable) 1. 레이아웃 설정: UICollectionViewLayout타입 레이아웃을 반환하는 메서드 생성 2. 데이터소스 설정(재사용셀+ 셀컨텐츠): diffable 데이터소스 타입으로 셀재사용(numberOfItemsInSection, CellForItemAt) + 셀컨텐츠 설정 *스냅샷데이터를 데이터소스에 저장하면 데이터갯수가 결정되기 때문에 그 데이터가 cell..
2022.10.20