Closed pcsoyeon closed 1 year ago
UICollectionView.CellRegistration<ListCollectionViewCell, Photo>
-> 위의 코드에서는 Photo 이 부분에 해당
셀을 등록할 때 주의할 점은 init 전에 타입을 명시해야 한다는 것이다.
왜 타입을 명시해야 하는가? 타입을 명시해야 init 구문 안에서 사용될 데이터의 타입을 정의할 수 있기 때문이다.
func fetchPhotoList(completionHandler: @escaping ([Photo]?, Int?, Error?) -> Void) {
let url = URLConstant.listURL
let headers: HTTPHeaders = ["Authorization" : APIKey.authorization]
let params = ["page" : 1,
"per_page" : 10]
let request = AF.request(url,
method: .get,
parameters: params,
encoding: URLEncoding.default,
headers: headers)
request.responseDecodable(of: [Photo].self) { response in
let statusCode = response.response?.statusCode
switch response.result {
case .success(let value):
completionHandler(value, statusCode, nil)
case .failure(let error):
completionHandler(nil, statusCode, error)
}
}
}
completionHandler를 통해서 서버 통신 이후 결과 값을 반환
https://api.unsplash.com/photos?page=1 .. 을 통해서 param이 URL path로 들어가는 것을 확인할 수 있다. (API 문서 확인)
그래서, 아래와 같이 함께 서버에 보내고 싶은 파라미터를 딕셔너리 형태로 만들고
let params: [String : Any] = ["page" : 1,
"per_page" : 10,
"order_by" : "popular"]
Alamofire를 통해 request를 할 때, encoding: URLEncoding.default
로 지정하면 된다.
Todo
네트워크
UI