서버에서 프로필 이미지는 url로 넘겨주며 이 url은 String 타입으로 준다. 이 url은 웹서버에서 이미지의 경로다! 그래서 우리는 이 url로 접속해서 이미지를 로드해올 수 있다.
guard let url = URL(string: profile.avatar_url) else {return}
self.imageView.kf.setImage(with: url)
위 코드의 profile타입에 저장된 avatar_url은 서버에서 받아온 프로필 사진 주소이다. 이를 URL 형식으로 변환해준후 kingFisher를 이용해 imageView에 image를 로드해주었다. 사용하는 방법은 은근 간단한듯... 근데 깃 보니까 제공하는 기능이 짱 많다..!
ios에도 기본적으로 제공되는 이미지 로드 기능이 있다! 하지만 kingFisher를 사용하는 것이 좋다! 왜? 이미지 다운로드와 캐싱기능을 자동으로 해준다. 그래서 메모리 관리가 편하다! 아직 완벽하게 이해는 안되지만 대충 뭔소린지 알겠음..
pull to refresh는 tableView나 collectionView에서 위로 댕겼을때 데이터를 새로 받아오는 기능을 말한다. 말 그대로 pull 당겨서 refresh 새로고침! 이 기능은 처음 구현해보아서 구글에서 많은 도움을 받아 구현하였다.
repoTableView.refreshControl = refreshControll
refreshControll.addTarget(self, action: #selector(refreshFunction), for: .valueChanged)
@objc func refreshFunction(){
repoTableView.reloadData()
}
페이징 기능은 테이블뷰 위의 화살표로 다음 페이지로 넘어갈 수 있도록 구현했다. 이때 조금 애먹었던 사항이 만약 레포가 14개 있다면 맨 마지막 페이지에는 테이블뷰가 4개만 나오도록 구현하도록, 그러니까 빈 테이블 6개와 4개가 아닌 그냥 테이블셀만 4개 나오도록 하는 것이였다.
그렇게 하기 위해 테이블 셀의 갯수를 지정하는 메서드를 다음과 같이 구현하였다.

그리고 화살표를 눌렀을때의 메서드는 다음과 같이 구현하였다.

그렇게 구현한 최종화면은 다음과 같다. 내 레포가 14개밖에 되지 않아서 딱히 페이징 기능을 해야했나 생각을잠시 했지만 일단은 만족! 그런데 refreshControl이 제대로 작동하지 않는것 같다...

많은 기능 구현한다고 고생하셨습니다 ㅎㅎ.. 깃허브 프로필의 캐릭터는 누구인가요?