static let → 여러 곳에서 접근, 한 번 메모리에 올라가면 종료될 때까지 남아있음
struct
인스턴스 생성 가능
인스턴스 생성을 막으려면 init()을 private하게 제어해주면 됨
URL Endpoint 분리하기
예전에는 단순하게 타입 프로퍼티를 이용해서 상수 관리하는 것처럼 URL을 관리했었는데 다음과 같이 enum을 이용해서도 URL을 관리할 수 있을 것 같다. Endpoint로 파일명을 짓는 것은 좋은 것 같다. Moya를 사용하거나, Alamofire 또는 URLSession을 모듈화해서 사용할 때도 Endpoint라는 이름으로 파일을 만들고 URL을 관리했던 것 같다.
enum EndPoint {
case blog
case cafe
var requestURL: String {
switch self {
case .blog:
return URL.makeEndPointString("blog?query=")
case .cafe:
return URL.makeEndPointString("cafe?query=")
}
}
}
네트워크 호출을 하고 난 후 Response가 오는 시점은 언제인지 알 수 없다. 화면에 TableView 또는 CollectionView가 그려질 때 아직 서버에서 데이터를 못 받아왔다면 화면에 그릴 내용이 없을 것이다. 화면을 이미 그린 후에 데이터가 도착했다고 생각해보자.
어떻게 해야 할까? 데이터가 완전히 받아와진 시점에 화면을 다시 그려줄 필요가 있다. 그럴 때 사용하는 메서드가 reloadData()이다. reloadData()를 호출하게 되면 아이템, 행을 몇 개 그릴지 어떤 셀을 꺼내올건지 등등에 대한 작업을 다시 수행하게 된다.
UITableView.AutomaticDimension
테이블 뷰 셀의 높이 조정
레이아웃을 잘 잡아놓아야 한다. 특히 위아래, 높이 관계에 대해 설정이 잘 되어있어야 한다.
상수 관리, API Key 관리
enum
struct
URL Endpoint 분리하기
프로퍼티
네트워크 호출
네트워크 호출을 하고 난 후 Response가 오는 시점은 언제인지 알 수 없다. 화면에 TableView 또는 CollectionView가 그려질 때 아직 서버에서 데이터를 못 받아왔다면 화면에 그릴 내용이 없을 것이다. 화면을 이미 그린 후에 데이터가 도착했다고 생각해보자.
어떻게 해야 할까? 데이터가 완전히 받아와진 시점에 화면을 다시 그려줄 필요가 있다. 그럴 때 사용하는 메서드가 reloadData()이다. reloadData()를 호출하게 되면 아이템, 행을 몇 개 그릴지 어떤 셀을 꺼내올건지 등등에 대한 작업을 다시 수행하게 된다.
UITableView.AutomaticDimension
만약에 특정 셀은 고정적인 높이를 주고 싶고, 나머지 셀은 유동적으로 높이를 조정하고 싶다고 한다면 Delegate method에서 처리를 해줄 수 있다. 이 때 해당 메서드가 우선순위가 높아서 더 우선적으로 호출된다.
셀 확장, 축소 구현하기 (Label 기준, 간단한 UI)
Label의 numberOfLines 속성을 이용해서 셀이 확장, 축소되는 듯한 UI를 구현해볼 수 있다.
우선 분기처리를 해줄 수 있는 Bool 타입의 변수를 하나 선언한다.
그리고 cellForRowAt 메서드 쪽에서 변수의 값에 따라서 numberOfLines 값을 조정해주면 된다.
그리고 가장 중요한 것은 tableView를 다시 그려주는 작업이다. 까먹지 말자.