전체 글 260

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

9. Keyboard

Simulator을 실행하면 TextBar혹은 SearchBar에서 키보드가 등장하지 않는 경우가 발생한다. simulator에서 Connect Hardware Keyboard를 선택하게 되면 내 컴퓨터의 키보드를 실제 앱 창에서 사용할 수가 있다. Toggle Software keyboard를 선택하게 되면 시뮬레이터 상의 키보드를 껏다 켰다를 가능캐 해준다. 시뮬레이터 상의 키보드를 등장시키고 싶으면 이를 한번 선택하면 된다. 끌때도 한번 선택하면 된다.

8. Tabbar, SafeArea, collectionView 설정

Storyboard Tabbar Controller initial 우리는 ViewController이 실행되면 home에서 시작되도록 해야하고, 이때 적절한 초기화 작업이 필요하다. 간단하다 --> Tabbar Controller을 "Is initial View Controller"을 체크해주면 된다. SafeArea 현재 위의 View에서는 사진이 SafeArea를 넘어간 것을 확인할 수 있다. 어떻게 하면 이런 설정이 가능할까? 현재 HomeView는 다음과 같은 구조로 되어있다. img_header은 View에 존재하고 View는 Scroll View 과 vertical spacing 을 0으로 맞추어서 scrollView의 top을 따라가게 된다. 그러면 Scroll View의 Second Ite..

7. Swift Escaping Closure ?? 😁

Swift Escaping Closure ?? 참고자료 Apple Inc. The Swift Programming Language (Swift 3.1) - Escaping Closure escaping closure swift3 What do mean @escaping and @nonescaping closures in Swift? Completion handlers in Swift 3.0 https://hcn1519.github.io/articles/2017-09/swift_escaping_closure Swift Escaping Closure 이해하기 Swift의 Escaping Closure에 대해 알아봅니다. hcn1519.github.io https://medium.com/@jgj455/%EC%..

10. URLSession 실습 3

이번엔 원하는 데이터를 내가 원하는 데이터를 Struct의 Property로 받아올 것이다. 당연히 json파일을 받아올 것이기에 Codable을 이용할 것이다. url을 뽑아내는 과정은 이전과 같다. 우선 URLSessionConfiguration을 default로 생성하고 이를 통해 URLSession을 생성한다. 그럼 session으로 실제 네트워킹을 하는 URLSessionTask를 생성할 텐데, 이때 보낼 request url을 만들면 된다. 영어가 아닌 term으로 검색하기 편하게 알아서 incoding 과정을 해주는 URLComponents를 생성한 한다. URLComponenets는 data를 optional로 저장하기에 URLComponents를 변수에 넣을 때와 url을 받아올때는 op..

9. URLSession 실습 2

사진을 클릭하면 확대된다. 주석으로도 정리가 되어있지만 한번더 정리해보자(주석 읽고 이것도 읽기를 권장한다.) 이번에는 실제 네트워킹으로 데이터를 가져와서 이용하는 방법에 대해 실습해볼 것이다. 지난 지산에 URLSession으로 URL을 구성하고, 여기서 필요한 property와 query, incoding, URLComponents에 대한 개념을 배웠다. 우리는 IOS 에서 Networking을 작업할 때 URLSession을 사용한다. URLSession을 만들기 위해서는 URLConfiguration을 3가지 네트워킹 자체 방식을 어떻게 할 것인지에 따라 생성해야하고 URLSession을 만들어야한다. 그리고 실제 네트워킹을 하는 것은 URLSessionTask이다. 이때 어떤 Type의 Task..

8. URLSession 실습1

클릭하면 크게볼수 있다! property of URL baseURL 지정 URLComponents를 통한 URLQueryItem 추가 termQuery에서 "지드래곤"이라는 영어가 아닌 언어를 사용했다. 그렇게 되면 에러가 발생한다. 컴퓨터가 언어를 이해하지 못하기 때문이다. 이럴때는 incoding이라는 작업이 필요하다. 하지만 URLComponents를 이용하게 되면 Query문을 각각의 Item에 넣어 추가를 하게 되고, 이러한 과정에서 알아서 인코딩을 해준다. 쉽게 말하면 영어말고 다른 언어를 쓰고 싶고, 인코딩하기 귀찮으면 URLComponents는 강력한 무기가 된다.

7. URLSession 개념

URLSession 개념 앱과 서버간의 데이터를 주고 받을 때는 HTTP라는 통신규약으로 주고 받는다고 했다. 실제 IOS 앱에서는 HTTP를 이용한 Networking를 어떻게 할까?? —> URLSession 여기서 헷갈릴 수 있으니 한번 더 강조하자면, IOS에서 네트워킹을 하기 위한 클래스는 URLSession이다. URLSession을 통해 네트워킹을 하려면 서로간의 약속이 되어있어야 하는데 이러한 통신 규약이 HTTP이다. 네트워킹을 할 때 효율적으로 네트워킹을 하기 위해 동시성이라는 개념을 이용하는데, 이때 사용하는 것이 GCD 이다. URLSession API IOS에서 네트워킹을 하기 위해서는 URLSession이 필요하다. URLSession은 URLSessionConfiguration..

5. DispatchQueue는 어떻게 사용할까?

DispatchQueue는 어떻게 사용할까? DispatchQueue는 어떻게 사용할까? https://medium.com/nbt-tech/dispatchqueue%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C-44f22f08d62 DispatchQueue는 어떻게 사용할까? 안녕하세요. 오늘은 iOS Dispatch Queue를 어떤 상황에 사용해야 하는지 알아보려합니다. Dispatch Queue를 이용하면 많은 이점이 있다는 것은 알고 있지만, 정작 사용된 모습을 찾아보기는 힘들었습니다 medium.com 해당 게시판의 글을 참고하여 정리하였다. GCD (Grand Central Dispatch) GCD는 Appl..

4. GCD (Grand Central Dispatch)

GCP (Grand Central Dispatch) 거대한 중심이되는 부분,조각?? IOS 개발 시 Concurrency(동시성)을 제공해 주기 위해서 우리가 사용할 수 있는 API는 GCD있다. --> IOS 가 네트워킹을 하기 위해 사용하는 것이 URLSession 이다. --> 네트워킹 과정에서 동시성 기능을 구현 가능캐 하는 것이 GCD 이다. 애플에서는 GCD를 다음과 같이 설명한다. Guarantee: 굳은약속, 보증서, 보증하다 해야할 일들을 만들어 GCD에 넘기면 시스템에서 알아서 Thread를 할당해서 안전하게 수행 시켜준다!! 그 해야할 일은 Code Block을 의미한다. 즉, Code Block를 GCD에 넘기면 알아서 수행해준다~~ GCD는 FIFO queue를 관리하고 제공한다...

3. Concurrency (동시성)

Concurrency (동시성) 한번에 여러개 수행!! App이 한번에 여러가지 일을 수행해야하는데 어떤 일을 하는지 살펴보자 작업번호 사용자 인터랙션(User Interaction 상호작용) 처리 네트워킹 백그라운드에서 파일 다운로드 파일 저장하고 읽기 네트워킹으로 인해 사용자 인터랙션을 못하거나 다른 것이 동작하지 않는다면 앱은 느려지고 아무도 사용하지 않게 될 것이다. 그렇기에 Concurrency는 반드시 필요한 작업이다. 컴퓨터 공학에서는 이러한 작업을 Thread 라고 한다. 우리의 폰, 컴퓨터 입장에서는 Thread 1, 2, 3, 4 모두가 동시에 처리 되어야 한다는 것이다. 그렇기에 context switching을 통해 왔다리 갔다리 하면서 Thread를 동작시킨다. 너무 빨라서 동시에..

2. 네트워킹 하는 것을 확인할 수 있는 툴

네트워킹 하는 것을 확인할 수 있는 툴 : Postman Postman: 네트워킹 하는 것을 확인할 수 있는 툴 https://www.postman.com/downloads/ Download Postman | Try Postman for Free Try Postman for free! Join 13 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster. www.postman.com 구글의 document를 응답받은 것이다. 실제 코드를 보여주기 위해 렌더링을 시켜준것이 위의 사진이다. 렌더링(rendering): 렌더링 또는 이미지 합성은 컴퓨터 프로그램을..

1. 네트워킹에 필요한 기초지식

네트워킹에 필요한 기조지식 네트워킹이란 서버와 앱 간의 데이터를 주고 받는 것이다. 어떻게 주고받을까? HTTP라는 방법으로 RESTAPI를 이용해서 JSON데이터를 주고받는다. HTTP는 우리가 쓰는 웹 브라우져 주소 좌측에 보이는 글자가 있는데 본적이 있는가? 이것은 서버에서 데이터를 받을 때 HTTP방법을 이용하자고 전세계에서 약속한 것이다. 이렇게 약속한 방법을 통해서 RESTAPI를 서버에서 구성해서 JSON 데이터 파일을 받게된다. JSON 데이터 파일은 전세계에서 약속한 것은 아니지만, 대부분의 회사에서 사용하고 있는 데이터 타입이다. HTTP 기초 HTTP: HyperText Transfer Protocol HTTP는 클라이언트(웹 브라우져, 모바일 앱)과 서버 간의 데이터를 어떻게 주고받..