Alamofire iOS13 - PullRequest
       2

Alamofire iOS13

0 голосов
/ 08 марта 2020

Я хочу обновить свой код в прошлом, когда я использовал swift 2 или 3. Я застрял там, где хочу использовать Alamofire, но способ его использования изменился, и я больше не знаю, как его использовать. Кто-нибудь может обновить эту часть кода и объяснить немного? Спасибо. Это оригинальный код.

Alamofire.request(.POST, url)
            .response{ (request, response, data, error) in
                let xml = SWXMLHash.parse(data!)
                let sunsetTime = xml["result"]["rise_and_set"]["sunset_hm"].element?.text
                self.sunsetTimeLabel.text = sunsetTime
                self.getDateFromString(sunsetTime,year: comp.year,month: comp.month,day: comp.day)
                if (error != nil) {
                    print(error)
                }
        }

это код, который я писал.

AF.request(url, method: .post).responseJSON { (responseData)  in
            let xml = SWXMLHash.parse(responseData as Data)
            let sunsetTime = xml["result"]["rise_and_set"]["sunset_hm"].element?.text
            self.sunsetTimeLabel.text = sunsetTime

При сообщении об ошибке «Невозможно преобразовать значение типа« AFDataResponse »(он же« DataResponse »). ') набрать' Data 'в принудительном порядке "

1 Ответ

1 голос
/ 08 марта 2020

Ваш первый фрагмент кода - синтаксис Alamofire 3. Из второго фрагмента кода я делаю вывод, что вы сейчас используете Alamofire 5.

Есть несколько проблем:

  1. Вы звоните responseJSON (что вы используйте только если ваш ответ был JSON, а не XML). Используйте response или, что лучше, responseData.

  2. Объект response, переданный этому замыканию, сам по себе не является Data. В случае метода responseData это объект AFDataResponse, который обладает свойством data (то есть Data?). Вы должны извлечь объект Data из этого AFDataResponse, либо развернув содержимое свойства data, либо из result (см. Следующий пункт).

  3. Вы, вероятно, должны проверить success или failure и извлечь Data из response.result объекта.

Итак, собрав все это вместе, вы получите что-то вроде :

AF.request(url, method: .post).responseData { response in
    switch response.result {
    case .failure(let error):
        print(error)

    case .success(let data):
        let xml = SWXMLHash.parse(data)
        ...
    }
}
...