Получение данных с URL-адреса с помощью Alamofire в Swift 4 - PullRequest
2 голосов
/ 18 апреля 2020

Я пытаюсь отправить запрос с Alamofire на URL-адрес, содержащий JSON, который выглядит следующим образом:

{
  "code": 11,
  "responseTS": 1587219531266,
  "message": "not running",
  "version": "2.1",
  "command": "http://www.url.com",
  "status": "NotRunning"
}

Это моя функция. Теперь он печатает ответ, но останавливается и не завершает остальную часть кода. Поскольку сообщение в JSON «не запущено», оно должно вызвать getDBLocation (), но оно останавливается после печати ответа (перед оператором guard). Может кто-нибудь сказать мне, почему это может происходить?

XCode не выдает ошибок, и приложение не обрабатывает sh, оно просто не продолжает работу, как я ожидал.

 func checkStatus() {
            let url = qpeUrl

            Alamofire.request(url).responseJSON { (response) in

                print(response)
                print(response.result)

                guard response.result.error == nil else {
                  print("error")
                  print(response.result.error!)
                  return
                }


                guard let tagStatus = response.result.value as? [String: Any] else {
                    self.audioFail.play()
                    let alertConn = UIAlertController(title: "ERROR!", message:
                            "Couldn't connect", preferredStyle: .alert)
                    alertConn.addAction(UIAlertAction(title: "完了", style: .cancel, handler: nil))
                    self.present(alertConn, animated: true, completion: nil)

                    self.captureSession.startRunning()

                    return
                }

                if let tagstatus = tagStatus["message"] as? String {

                    if tagstatus.contains("Unknown") || tagstatus.contains("not running"){

                        self.getDBLocation()
                    }

                }

                if let tagstatus = tagStatus["message"] as? String {

                    if tagstatus.contains("TagPosition") {
                        self.audioSuccess.play()

                        self.sendQPERequest()
                    }
                }
            }
        }

Извините за вопрос это, вероятно, спрашивалось раньше. Я думаю, что упускаю что-то очевидное, потому что это работало ранее. Однако, после нескольких недель попыток исправить это, я действительно не могу понять, что происходит.

Редактировать: Кажется, что код работает нормально, только если я пройдусь по нему. Если я не пройдусь по нему, он напечатает SUCCESS (print (response.result)), а затем остановится перед первым защитным оператором. Код может работать пошагово, поэтому я действительно не знаю, что происходит.

...