pcsoyeon / SSAC-SAEBBING

나는 새삥. 모든게 다 새삥.
5 stars 1 forks source link

[Feat] 사진 리스트 구현 #5

Closed pcsoyeon closed 1 year ago

pcsoyeon commented 1 year ago

Todo

네트워크

UI

pcsoyeon commented 1 year ago

UICollectionView.CellRegistration<ListCollectionViewCell, Photo> -> 위의 코드에서는 Photo 이 부분에 해당 셀을 등록할 때 주의할 점은 init 전에 타입을 명시해야 한다는 것이다.

왜 타입을 명시해야 하는가? 타입을 명시해야 init 구문 안에서 사용될 데이터의 타입을 정의할 수 있기 때문이다.

pcsoyeon commented 1 year ago

사진 리스트 서버 통신 코드 (Alamofire 사용)

    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를 통해서 서버 통신 이후 결과 값을 반환

pcsoyeon commented 1 year ago

param

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 로 지정하면 된다.