UIKit

Swift/etc

[Swift] self와 Self의 차이점

self 보통 인스턴스 메서드 안에서 현재 객체를 가르키고 싶을 때 사용한다. 프로퍼티, 메서드를 대상으로 한다. Self 단순 객체가 아니라 Type(class, struct etc)을 가르키는 키워드이다. 만약 static 메서드를 사용한다면 이건 타입 자체에 속하기 때문에 self를 사용할 수 없다. 부끄럽게도 이제야 이걸 알게 되었다. 몰랐던 원인은 Xcode가 알려줄때 Self를 사용해야 하는 시점에 해당 타입을 추천해줘서 직접 모든 타입명을 다 입력해서 사용했기 때문이다. 반성

Swift/Rick & Morty

[iOS] Rick&Morty - #13 Character Detail View(2)

Compositional Layout을 이용하여 DetailView의 레이아웃을 설정해 준다. (Snapshot X) 지난번에 우리가 제작한 DetailView는 별다른 내용이 들어있지 않았다. 이를 디자인하고 내용을 채워 넣을 것이다. DetailView에서는 그 캐릭터에 대한 내용을 볼 수 있게 해야한다. 릭 앤 모티 API 문서에는 single character에 대한 내용을 받아오는 API가 있다. 안에 있는 내용으로 구상해보면 큰 이미지와 다양한 캐릭터 정보를 밑에 표시할 것이다. 또한, 에피소드가 굉장히 많으므로 스와이프 해서 에피소드를 확인할 수 있는 기능을 넣자. 컬렉션 뷰를 사용하는데 구버전에서 주로 사용됐던 FlowLayout 방법이 아니라 Compositional Layout으로 구현..

Swift/Rick & Morty

[iOS] Rick&Morty - #12 Image Loader

Image Loader를 만들고 안에서 캐시를 처리하여 효율적으로 처리하는 기능을 만든다. BUG 제거 지난번에 한 번만 부르면 더 안 불러졌었다. 이유는 간단한데 fetchAdditionalCharacters에서 isLoadingMoreCharacter를 다시 false로 바꿔주는 작업을 우리가 이전에 주석처리하고 진행했기 때문이다. final class RMCharacterListViewViewModel: NSObject { ... public func fetchAdditionalCharacters(url: URL) { ... RMService.shared.execute(request, expecting: RMGetAllCharacterResponse.self) { [weak self] result ..

Swift/Rick & Morty

[iOS] Rick&Morty - #11 Pagination

더 많은 캐릭터들을 불러와서 화면에 로딩하는 작업을 한다. API Call fetchAdditionalCharacters 메서드에서 call을 하게 된다. RMService를 이용해서 데이터를 불러온다. 그를 위해서 scrollViewDidScroll에서 guard로 nextUrlString이 nil인지 확인하고 이를 이용해 url을 만들어 fetch 메서드에 url을 넣어주자. url을 이용하여 RMRequest를 구성하려고 보니까 초기화시키는 게 살짝 불편하다. 여기서 편한게 convenience init이다. 진짜 이렇게 말함 ㅎㅎ covenience init은 예전에 github에서 살짝 정리한 글이 있다. 모른다면 참고 이제 RMRequest에서 아래의 코드를 작성해 convenience ini..

Swift/Rick & Morty

[iOS] Rick&Morty - #10 Pagination Indicator

무한 스크롤 지난번에 하다가 말았던 구현 두 가지를 다시 생각해 보자 원하는 때(API call)에 스피너(인디케이터)를 출력시키기 User가 컬렉션 뷰의 최하단까지 스크롤하는지 위치 판단 1번 이슈의 틀만 잡아놓고 끝났었다. 출력할 View를 만들고 스크롤의 위치를 감지하고 원하는 순간에 나오게 할 것이다. 새로운 ReusableView 최하단에서 스피너를 출력하는 건 ReusablView라는 걸 붙여서 구현한다. RMFoorterLoadingCollectionReusableView을 생성하자. 항상 길어도 자세하게 적는 습관을 가지자. Cell과 유사하게 만들고 배경색을 주자. final class RMFoorterLoadingCollectionReusableView: UICollectionReusa..

Swift/Rick & Morty

[iOS] Rick&Morty - #9 Character Detail View

셀을 탭 하여 DetailView라는 곳으로 이동하게 해 보자 설계 DetailView를 만들기 위해 어떤 걸 만들어야 할까? MVVM 구조를 채택하고 있는 우리 구조에서 먼저 새로운 VC, View, VM을 만들어야 한다. 이때, Delegate를 이용하여 탭 했을 때 정보를 전달하는 구조를 만든다. 델리게이트를 다룰 때는 VM에서 델리게이트 처리하고 -> ListView에서 다시 델리게이트 처리하고 VC에서 다시 델리게이트 처리하는 순서로 나아갈 것이다. 사소한 UI 수정 디테일 뷰를 만들기 전에 우리가 생각 못 한 부분을 처리하자. 현재 컬렉션 뷰를 최하단으로 내리면 가장 아래 셀은 그림자가 약간 잘린다. collectionView UI 잡는 곳으로 가서 sectionInset의 bottom을 10..

Swift/Rick & Morty

[iOS] Rick&Morty - #7 CollectionViewCell

지난번엔 컬렉션 뷰를 View에서 잡아주고 Spinner를 정의해 줬다. 이제 컬렉션 뷰에 들어갈 셀을 만들고 형태를 잡아야 한다. Cell을 만들기 전에 네이밍 컨벤션을 맞추자 기존에는 모든 VM, VC, V들에 RM prefix를 안 붙인 것들이 있을 것이다. 지금 다 고쳐놓는다. Cell 생성 기본적으로 Cell을 만들때는 6가지 요소를 먼저 만들고 시작하자. Cell의 이름인 cellIdentifier, 초기화를 담당하는 init, required init. layout을 위한 addConstraints, 재사용을 위한 prepareForReuse, 마지막으로 ViewModel을 이용하여 화면을 그릴 configure. 이때 들어올 뷰 모델은 유일한 하나이기 때문에 타입명을 생성될 뷰모델의 이름 ..

Swift/Rick & Morty

[iOS] Rick&Morty - #6 Character List View

지난 강의까지 우리는 API 통신을 위한 구조를 설계하고 구현했다. 이제 데이터를 받아 화면에 출력하기 위한 기법을 배운다. 목표 UI 그리드 모양으로 이뤄진 리스트를 만들 것이고 이를 MVVM 아키텍처를 이용하여 구성한다. ViewModel 이전에 작업했던 CharacterVC에서RMService.shared.execute 메서드를 이용하여 작업했었다. 이 코드를 그대로 가져오고 약간 수정하여 사용하게 된다. VM이 없으면 struct로 만들어서 사용하자 (빈 VM을 만들어 놨었는지 기억이 안 난다) struct CharacterListViewViewModel { func fetchCharacters() { RMService.shared.execute(.listCharactersRequests, exp..

Swift/Rick & Morty

[iOS] Rick&Morty - #5 API Call

이번에는 5강을 참고하여 API 호출까지 한다. RMService에서 request 구성 RMRquest를 받아서 실제 URLRequest를 만드는 메서드다. 현재 rmRequest에서는 request를 구성하기 위한 url과 httpMethod가 정의되어 있다. 이를 이용하여 만들어 리턴하자. final class RMService { ... private func request(from rmRequest: RMRequest) -> URLRequest? { guard let url = rmRequest.url else { return nil } var request = URLRequest(url: url) request.httpMethod = rmRequest.httpMethod return reque..

Swift/Rick & Morty

[iOS] Rick&Morty - #4 API Request

이번 글에서는 4번 강의를 참조하여 API Request를 구성하는 방법에 대해 알아본다. API Request의 구성 요소 - Base URL - End Point - Path Components (optional) - Query parameters 전체적인 순서 우리는 Service, Request, Endpoint의 세 파일을 생성하였다. 각 파일에 있는 타입들은 Endpoint의 정보를 Request에서 사용하여 Request를 완성하고 다시 이를 받아 Service에서 통신을 하게 된다. 굳이 이 순서대로 만들 필요는 없다. 자연스럽게 필요할 때 정의하여 사용하면 된다. 하지만 이 틀은 앞으로도 유지되므로 순서를 따르면 좋을 거 같다. 먼저, RMService에서 execute라는 메서드를 만든..

devKen
'UIKit' 태그의 글 목록 (2 Page)