Это перенесено правильно? - PullRequest
0 голосов
/ 05 июня 2019

Я мигрирую проект в Swift 5. (с Alamofire 4.7.3 до 5.0.0-beta.5), и я столкнулся с ошибкой в ​​функции uploadImage в моем проекте.

Ранее upload(multipartFormData...) в Alamofire имел параметр encodingCompletion: ((SessionManager.MultipartFormDataEncodingResult) -> Void)?).В новых версиях это изменилось, и функция возвращает UploadRequest.

Кроме того, Alamofire теперь поддерживает встроенную функцию Decodable с responseDecodable, поэтому для выполнения этих задач пользовательский метод responseDecodeableObject больше не требуется.

К сожалению, я очень неопытен с Alamofire (сетью в целом) и не уверен, рассмотрел ли я все, что нужно учитывать.Может кто-нибудь с большим опытом пересмотреть эту миграцию?


Старый код:

static func uploadImage(withImage image: UIImage, completion: @escaping (Member?, Error?) -> Void) {
  let putRequest = RequestRouter.saveProfileImage
  if let imageData = image.pngRepresentation {
    if let url = URL.init(string: putRequest.urlData.path) {
        MyNetwork.client.upload(multipartFormData: { multipartFormData in
            multipartFormData.append(imageData, withName: "Image", fileName: "Image.png", mimeType: "image/jpeg")
        }, to: url,
           method: .put,
           encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseDecodableObject(completionHandler: { (response: DataResponse<Member>) in

                    switch response.result {
                    case .success(let data):
                        data.saveInCoreData(completion: { (error) in //save in core data
                            if let error = error { completion(nil, error); return }
                            completion(Member.member(withId: data.id), error) //return profile from core data
                        })
                    case .failure(let error):
                        MPage.checkExpiredSession(returnedObject: nil, error: error) { _, _ in
                            completion(nil, error)
                        }
                    }
                })
            case .failure(let encodingError):
                print(encodingError)
                completion(nil, encodingError)
            }
        })
    }
  } else {
    completion(nil, nil)
  }
}

Новый код:

static func uploadImage(withImage image: UIImage, completion: @escaping (Member?, Error?) -> Void) {
    let putRequest = RequestRouter.saveProfileImage
    if let imageData = image.pngRepresentation {
        if let url = URL.init(string: putRequest.urlData.path) {
            let uploadRequest = MyNetwork.client.upload(multipartFormData: { multipartFormData in
                multipartFormData.append(imageData, withName: "Image", fileName: "Image.png", mimeType: "image/jpeg")
            }, to: url,
               method: .put).responseDecodable(completionHandler: { (response: DataResponse<Member>) in

                switch response.result {
                case .success(let data):
                    data.saveInCoreData(completion: { (error) in //save in core data
                        if let error = error { completion(nil, error); return }
                        completion(Member.member(withId: data.id), error) //return profile from core data
                    })
                case .failure(let error):
                    MPage.checkExpiredSession(returnedObject: nil, error: error) { _, _ in
                        completion(nil, error)
                    }
                }
               })
        }
    } else {
        completion(nil, nil)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...