부스트코스 프로젝트C WeatherToday 리뷰

리뷰 내용

옵셔널 바인딩

let selectedCellInedx = tableView.indexPathForSelectedRow
let country: Country = self.countries[(selectedCellIndex?.row)!]

->

guard let selectedCellIndex = tableView.indexPathForSelectedRow else {
	return
}
let country: Country = self.countries[selectedCellIndex.row]

옵셔널 바인딩을 활용해 언래핑하는 것이 중요하다.

extension 활용

DataSource 메서드를 extension 으로 분리함으로써 가독성이 좋아졌다.

Delegate 활용

UITableViewDelegate 를 활용해서 tableView, didSelectRowAt 사용 후 tableView.deselectRow 메소드를 사용하면 처음에 셀을 클릭하면 해당 셀의 색깔이 그대로 이전으로 화면을 전환해도 남아있는데 사라지게 된다.

Computed Property

string 처리와 같은 비즈니스 로직은 뷰 컨트롤러에서가 아닌 모델에서 처리하는 것이 좋다.

viewController에서 func weatherState 에 따라 해당 날씨의 String을 return 해줬는데 위에서와 마찬가지로 City.swift 모델에 포함시키면 비즈니스 로직을 최소화할 수 있다.

예외케이스 처리

switch문 default 출력 시에 그냥 빈문자를 출력하게 했는데 이러면 에러를 파악하기 너무 어렵다. 이때 옵셔널을 사용하는 것이 좋고 예외 케이스에 nil을 return하는 것이 일반적이다.

셀 deque 언래핑 처리

let cell: CityTableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier) as! CityTableViewCell

->

guard let cell: CityTableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier) as? CityTableViewCell else {
	preconditionFailure("실패")
}

첫번째와 같이 강제로 해주면 crash의 가능성이 있다.
옵셔널 바인딩을 사용하는 것이 좋다.
실패 시에도 셀을 return을 해주어야 하는데 return을 해주니까 non-void function 오류가 발생했다.
이럴 때는 fatalError, preconditionFailure 를 이용해서 일부러 crash를 내줘서 빠르게 파악할 수 있다. (이렇게 처리했다고 주석처리로 설명을 보충하는 것도 좋다.)
또는 에러 메시지를 담아서 사용자에게 알려줄 수도 있다.

값 전달

각 전달할 것마다 paramTitle, paramAssetName 등으로 정하고 전달했는데 이러는 것보다 struct로 Country를 만들었기 때문에 그대로 전달하는 것이 더 좋고 편리하다. (더 일반적인 방법이다.)
struct는 value 타입이라서 전달되면서 복사가 된다.
코드에서는 Country, City가 모두 struct로 되어있기 때문에 그대로 전달해주는 것이 더 올바르다.

좋은 웹페이지 즐겨찾기