Toy Project 81

6. Search 결과 구현 2 - UI Update through MainQueue

Search 결과 구현 2 - UI Update through MainQueue 지금까지 수행한 구현을 Build 하게 되면 오류가 발생한다. Main Thread에 의하면 UI update가 main Thread 가 아닌 곳에서 불려서 문제가 생긴 것이다. ?? 여기는 무슨 Thread인데 ?? 여기에서는 계속 Networking에 대한 기능을 구현했다. —> Global thread , qos: utility 네트워킹은 느린 녀석이기에 위의 thread를 통해 기능이 동작하는데 여기서 main thread에서 해야할 UI update를 해서 에러를 날린 것이다. 다음과 같이 Main Thread로 옮겨서 기능을 수행하면 오류없이 빌드 된다.

5. Search 결과 구현 1 - CollectionView

Search 결과 구현 1 - CollectionView 현재 검색 API를 만들었고, 결과를 받아올 모델 Movie, Response와 데이터를 받아오는 logic을 완성했다. 이제 결과를 받아와서 CollectionView를 표현해보자 CollectionView DataSource, Delegate를 구현해보자 MVVM패턴에서는 ViewController에서 데이터를 갖는게 아닌 ViewModel이 데이터를 갖고있고 메소드를 통해 가져오도록 해야하지만, 전체적 구조에 대한 이해를 높히고자 이렇게 구현해뒀다. CollectionView와 SearchViewController의 DataSource, Delegate를 연결하고 다음과 같은 protocol을 구현하면 된다. UICollectionViewCe..

4. SearchAPI 구현 2 (parsing)

SearchAPI 구현 2 - parsing 현재 받아온 JSON데이터는 다음과 같다. 그렇다면 이를 parsing하기위해서 Codable을 이용할 것이다. 이렇게 key를 맞춰서 parsing 할 준비가 완료되었다. Type Method --> search() 검색할 데이터를 SearchBar에 넣고 Search를 누르게 되면 해당 text 데이터를 ITunes에서 네트워킹을 시도한다. 여기서 적절한 예외처리 후 받아온 데이터를 parsing 하는 작업이 필요하다. 왜? 우리는 Movie데이터를 이용하기 때문에!! 현재 메소드의 길이가 길어지니 parsing하는 method를 새롭게 만들어보자 —> parseMovies() 받아온 데이터는 현재 Data type를 가진다. 데이터를 받아와서 [Movie..

3. SearchAPI 구현 1 (Networking)

SearchAPI 구현 1 (네트워킹) 이제 searchBar.text를 받아서 이를 SearchAPI를 통해 겸색 결과를 받을 것이다. 우선 우리가 필요한 것, 구현할 것에 대해 적어보자 Type Method 우리는 class SearchAPI 를 정의하고 메소도를 선언할 것인데, 이를 instance method가 아닌 type method로 선언한다. Type method 와 Instance method 의 차이점이 궁금하면!!! —> yeongwoo-cho.tistory.com/133 6. Instance Method vs. Type Method Instance Method vs. Type Method https://cocoacasts.com/swift-fundamentals-what-is-the..

2. SearchBar 구현

SearchBar 구현 1. Search Bar와 collectionView가 필요하다. 2. 빈틈없게 Auto Layout을 적용한다. SearchViewController 우선 적용한 searchBar와 collectionView를 ViewContoller에 outlet으로 연결한다. searchBar의 경우 searchbar에 의한 결과들을 ViewContoller에 위임시켜서 거기에 해당하는 일들을 VC에서 담당하도록 할 것이다. —> searchBar를 ViewContoller에 Delegate 연결 여기서 SearchBar와 관련된 메소드를 구현할 것이다. 여기서 search를 눌렀을 때, ViewContoller에게 알려주는 method가 존재한다. —> searchBarSearchButto..

1. Netflix Style Application

Netflix Style Application 검색 결과를 CollectionView로 보여준다. 서버에 있는 영상을 스트리밍 할 수 있게 기능을 만들어 본다. 기본 작업 yeongwoo-cho.tistory.com/135 8. Tabbar, SafeArea, collectionView 설정 Storyboard Tabbar Controller initial 우리는 ViewController이 실행되면 home에서 시작되도록 해야하고, 이때 적절한 초기화 작업이 필요하다. 간단하다 --> Tabbar Controller을 "Is initial View Controller".. yeongwoo-cho.tistory.com

14. Closure Logic Implement

doneButtonTappedHandler, deleteButtonTappedHandler 우리는 현재 collectionView에서 Cell을 어떻게 표현하는가에 해당하는 프로토콜에 doneButtonHandler과 deleteButtonHandler의 기능을 구현하지 않았다. 기억을 상기시키기 위해서 해당 코드를 살펴보자. TodoListCell에는 Closure로 정의된 doneButtonTapHandler과 deleteButtonTapHandler이 존재한다. checkButtonTapped를 살펴보면 checkButton이 눌리게 되었을 때의 변경되어야할 상태 값을 변수에 지정하였다. 그렇다면 그 지정한 값들이 checkButton이 눌려졌을때 업데이트되어 Cell에 보여지게 해야할 것이다. 그..

13. AddButtonTapped

Data Append 이제 데이터를 실제로 추가하는 기능만 추가하면 끝이다!!!! 우리는 +, add 버튼이 눌렸을 때 무엇을 해야할까? 우선 TextField에 text가 존재하는지 여부를 판단해야한다. createTodo를 호출하여 todo객체를 생성한다. 이를 todoListViewModel에 add 하면 된다. collectionView를 reload한다. —> 그래야 ViewModel에 있는 추가된 데이터들이 CollectionView에 표시될 것이다. inputTextView를 reset한다. isTodayButton도 default값으로 reset한다.

12. Tap Gesture Recognizer

이제 키보드를 내리는 작업을 할 것이다. 키패드 부분이 아닌 영역에 클릭하게 되면 키패드가 내려오도록 구현하려 한다. Object library를 살펴보면 “Tap Gesture Recognizer” 이 존재한다. Tap Gesture Recognizer 는 다른 View에 붙혀서 사용가능하다. 우리는 TGR을 전체 View에 붙혀서 사용할 것이다. 그리고 Tap을 하게 되면 이를 인지하게 되고 이를 통해 추가 코드로 부터 키패드를 내리도록 하겠다. 정리하면 현재 전체 View나 버튼 같은 곳이 아닌 곳을 Tap을 하게 되면 뭔가를 지정하지 않았으니깐 누른지 모른다고 생각하면 된다. 그렇다면 Tap을 했다는 것을 인지해야 하는데 이는 Tap Gesture Recognizer을 통해 Tap을 인지하게 된다..

11. Keyboard

Text Field를 삽입하고 선택하게 되면 FirstResponder()에 반응하여 키패드가 등장한다. 쉽게 표현하면 현재 집중되어 있는 요소가 Text Field라는 의미이다. 그렇다면 keyboard를 올리고 내리는 동작에 대해 구현하도록 하자. Today Button isTodayButtonTapped에 대한 구현을 완료하였다. Button이 눌린다는 것은 눌리는 상태를 저장할 변수(outlet)과 누르는 행위(action)이 존재한다. 여기서 배워야 할 것은 코드를 구성하는 구조이다!! View 높이 조절 현재 두개의 차이점은 키패드가 등장함에 따라 text Field가 포함된 View의 위치가 이동하냐 안하냐의 차이이다. 이제 키패드를 등장시키는 코드와 View의 이동을 함께 구현해보자 우선 ..

10. input text View 만들기

input text View 만들기 우선 View를 collectionView와 동일한 scope인 전체 View에 대해 삽입한다. 안에 text Field와 Button을 만들고 아이콘 수정 및 Auto Layout을 설정한다. 여기서 중요한 점은 Text Field를 누르게 되면 키패드가 등장할 것인데, 숫자, 특수문자, 한글, 영어 등 다양한 키패드가 존재하는데 이를 선정 해주어야 한다. default로 설정한 다음 대부분의 추가기능은 사용하지 않는 것으로 하자. 현재 ViewController애서 각 변수들을 연결해줄 것이다. 여기서 inputViewButton의 경우 Constraint인데 이는 text View를 클릭할 경우 키패드 만큼 View의 Bottom이 올라가야 하기에 지정해준 것이다..

9. Storage 구현

Storage 구현 뼈속까지 이해한다기 보다는 전체적인 큰 틀과 어떻게 구성되어 있는지를 중점으로 봐라잉~ https://developer.apple.com/documentation/foundation/filemanager Apple Developer Documentation developer.apple.com https://zeddios.tistory.com/440 iOS ) FileManager를 이용해 파일/폴더 만드는 법 안녕하세요 :) Zedd입니다. 제목이 뭔가 추상적인데.....이 글은...저를 위한....공부... FileManager를 이용해 파일/폴더 만드는 법 파일 및 디렉토리와 관련된 가장 기본적인 작업 중 일부는 파일 시스 zeddios.tistory.com https://hcn1..