목록분류 전체보기 (88)
iOS 개발일지

iOS 앱 개발자 데뷔 과정 27회차 #1. Checklist - XIB UIView Custom Class UITableViewCell, UICollectionViewCell 뿐만 아니라 UIView를 상속받은 Subclass에서도 XIB를 만들 수 있다. SafeArea Layout Guide & Freeform Size ViewController가 아니기 때문에 SafeArea를 가질 필요가 없어 Safe Area Layout Guide를 해제하고 작업한다. 그리고 Size Inspector의 Simulator Size를 Freeform으로 조절해 원하는 UIView의 크기로 만들어서 작업할 수 있다. File's Owner Custom Class를 View가 아니라 File's Owner에서 설정..

iOS 앱 개발자 데뷔 과정 26회차 #0. Memo - 요청할 API의 URL이 비슷할 경우에, Clousre를 활용하자! kakao의 검색 API를 사용할 것인데, 블로그 검색과 카페 검색을 나눠서 지원하기 때문에 URL의 뒷부분만 달라진다. 따라서 extension과 static을 활용해 baseURL을 만들고, endpoint에 따라 다른 URL을 반환하도록 했다. 그리고 Endpoint를 선택할 수 있도록 열거형을 만들고, 연산 프로퍼티와 switch를 활용해 URL을 완성시킬 수 있게 했다. 이제 준비는 끝났으니, 서버 요청 함수에 적용시켜보도록 하자. 이제는 request를 작성하는 것이 꽤 익숙해졌다. 블로그 검색 결과를 먼저 받아온 후 카페 검색 결과를 받아오기 위해 searchCafe는..

iOS 앱 개발자 데뷔 과정 5주차 마무리 #2. Assignment - TMDB 프로젝트 구현하기 1. trending 정보를 보여주는 화면에서 링크 버튼을 클릭했을 때, 웹뷰가 있는 컨트롤러로 화면전환된다. 웹뷰를 활용하고, API 응답값에서 유튜브 링크를 통해 예고편 비디오 등을 실행하도록 한다. API로 유튜브 링크를 연결하는건 아직 안해봤지만, 버튼을 클릭하고 웹뷰로 전환하는건 빨리 끝내겠다! ...라고 생각했으나, CollectionViewCell 내부의 버튼을 동작하게 하려면 별도의 작업이 필요했다. tag와 addgatget을 이용하는 방법, Delegate를 이용하는 방법, 클로저를 이용하는 방법 총 세 가지의 방법이 있다. 이 중 Delegate를 이용하여 구현했는데, 처음엔 어려워보여..

iOS 앱 개발자 데뷔 과정 25회차 #1. Checklist - Closures 클로저는 익명함수, 이름 없는 함수를 의미한다. 클로저는 기본적으로 아래와 같이 '클로저 헤더' in 클로저 바디'의 형태이다. 매개변수가 생략될 경우, 할당되어 있는 내부상수 $0 을 사용할 수 있다. ($0, $1, $2 ...) Inline Closure : 함수의 매개변수 내에 클로저가 그대로 들어간 형태로, 코드를 생략하지 않고 클로저 구문을 작성한다. Trailing Cloure : 함수 뒤에 클로저가 실행되기 때문에 후행 클로저라고 한다. @autoclosure : 함수의 인자로 전달되는 코드를 감싸서 자동으로 클로저로 만들어 준다. 이때 사용되는 클로저는 인자가 없고 리턴값만 존재해야 한다. @autoclos..

iOS 앱 개발자 데뷔 과정 24회차 #1. Checklist - 서버 통신 시 셀에 보여줄 UIImage 변환 시점 / TMDB 장르 대응 방법 등 String -> URL -> UIImage 로 변환하는 코드는 서버 통신 함수 내부에 작성할 수도 있고, 외부에 작성할 수도 있다. 내부에서 이미지 변환까지 끝내면 외부에서 그만큼 간단하게 적용시킬 수 있지만, 그만큼 함수가 무거워질 수 있다. 개인적으로는 내부에서는 String을(api_url과 imge_url) 합치는 정도만 하는 것이 좋을 것 같다. TMDB 장르는 Int로 반환되는데, 이렇게 하면 언어별 대응이나 유지보수 측면에서 이점이 있을 수 있다. 이번에 구현한 방법으로는, 우선 TMDB 장르 목록을 서버 통신을 통해 받아오는 함수를 만들어 ..

iOS 앱 개발자 데뷔 과정 23회차 #1. Checklist - .gitignore [0802 새싹 22회차 정리] #0. Memo 참고 - Pagination Pagination이란 보여줄 데이터는 많으나 한번에 다 보여줄 수 없을 때, 쿼리의 결과값으로 리턴된 리소스를 분할하여 전달하는 것이다. Offset based Pagination은 몇 번째 페이지에서 몇 개의 데이터를 보여줄 지 쿼리스트링으로 전달한다. 페이지 단위로 서버에게 정보를 요청하는 사이에, 서버의 데이터가 변화한다면 중복 데이터가 노출될 수 있다. 서버의 데이터 변화가 적은 구조의 경우(일반 검색 결과 등)에 적합하다. Cursor based Pagination은 클라이언트가 가지고 있는 마지막 데이터를 기준으로, 다음 데이터를 ..

iOS 앱 개발자 데뷔 과정 22회차 #0. Memo - searchBar 구현하기 searchBar를 구현하기 위해서는 VC에서 UISearchBarDelegate 프로토콜을 채택해야 한다. extension을 활용해 프로토콜을 채택 후 서치바 버튼 클릭 함수를 작성하고, 그 안에서 정보를 받아오는 메서드를 호출했다. 이 때 여러가지 고려할 수 있는 사항이 많지만 나중에 고치기로 했다. viewDidLoad에 searchBar.delegate = self 코드도 잊지 말고 작성하자. - TableView에서 데이터 표현하기 받아온 데이터를 테이블뷰에 나타내는 코드를 작성했다. 우선 빈 배열을 만든 다음 (Type은 미리 만들어놓은 Struct로 설정했다) 나타낼 데이터를 cell에 입력하고 반목문을 통..

iOS 앱 개발자 데뷔 과정 21회차 #0. Memo - 프로토콜로 Identifier 쉽게 관리하기 여태까지는 리터럴한 문자열 사용을 줄이기 위해, static let을 통해 클래스마다 Identifier를 저장해서 사용했었다. 하지만 이제 여러 문법을 배웠으니 프로토콜과 연산 프로퍼티, 익스텐션을 활용해 더 쉽게 관리할 수 있다. - 구조체와 열거형의 타입 저장 프로퍼티 활용 만약 enum의 case를 활용해서 StoryboardName을 관리했을 때 어떤 문제가 있을 수 있을까? 우선, StoryboardName은 대문자로 시작하지만 case는 소문자로 적는 것이 보편적이다. 따라서 뒤에 rawValue를 따로 입력하거나, 어쩔 수 없이 case를 대문자로 적을 수도 있다. 그리고 두 방법 모두 실..