SeSAC/수업정리(11)
-
083_Network(signup, login)
-. 회원가입 시 네트워크통신으로 회원정보를 서버에 저장(signup->server) -. 로그인 시 네트워크통신에 성공하면(입력한 정보가 저장된 회원정보와 일치하면) 토큰발급(login->server) -. 토큰을 Userdefaults 통해 사용자정보 헤더에 넣어서 화면전환할때마다 로그인 할 필요없도록 함. 코드축약 전 -. 네트워크 통신에 필요한 요소를 각각 선언(url, header, parameter) func login() { let url = "http://api.memolease.com/api/v1/users/login" let header: HTTPHeaders = ["Content-Type": "application/x-www-form-urlencoded"] let parameter =..
2022.11.02 -
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 -
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(숫자입력, 검색이미지)
-. 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 -
072_UICollectionLayoutListConfiguration(테이블뷰스타일 컬렉션뷰)
iOS 13에서 나온 CollectionView API(DiffableDataSource, Compositional Layout)를 기반으로 iOS14에서 Section Snapshot, List Configuration이 새로 나왔다. 이를 사용하여 테이블뷰처럼 생긴 컬렉션뷰를 만들 수 있다. #.테이블뷰 스타일 컬렉션뷰 흐름 1. 레이아웃 설정: 테이블뷰처럼 생긴 컬렉션뷰 레이아웃을 만든다.(레이아웃 스타일을 만들고->레이아웃을 생성하고->레이아웃을 화면에 표시) 2. 재사용셀 설정: 데이터를 가진 셀을 재사용할 수 있도록 설정한다. 3. 셀컨텐츠 설정: 재사용에 사용할 셀이 데이터를 가질 수 있도록 하고 셀속성도 적용한다. *테이블뷰처럼 생긴 컬렉션뷰는 컬렉션뷰에 테이블뷰속성을 가진 셀을 얹는 느낌..
2022.10.18 -
032_for-in, foreach 알아보기
▶for-in은 반복문이다. 아래와 같이 작동한다. let nums: [Int] = [1, 2, 3, 4] for num in nums { print(num) // 1 2 3 4 } ▶foreach는 for-in문처럼 순차적으로 주어진 클로저를 호출하는 것이다.(반복실행하려는 코드를 파라미터로 받고 저장된 요소는 클로저 상수로 전달된다. 아래 내용에서는 $0이라는 상수에 저장.) let nums: [Int] = [1, 2, 3, 4] nums.forEach { print($0) // 1 2 3 4 } ▶for-in은 함수안에서 return을 만나면 함수 자체가 종료한다. 따라서 아래 출력값은 1이다.(1을 출력하고 2부터는 반복 안 함) func printForIn() { let nums = [1, 2,..
2022.08.17