Как я могу получить переменную к тексту из php для быстрого приложения - PullRequest
0 голосов
/ 26 апреля 2019

Я использую этот код и отлично работаю. Я использую Swift. PHP работает нормально. Я также попробую другие примеры на этом У меня 2 проблемы Сначала мои значения responseString превращаются в Необязательные («Успех»). Зачем? во-вторых, как можно назначить его на мою кнопку?

func makePostCall() {
        var request = URLRequest(url: URL(string: "MyURL/page.php")!)
        request.httpMethod = "POST"
        let postString = "id=login"
        request.httpBody = postString.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data, error == nil else {                                                 // check for fundamental networking error
                print("error=\(error)")
                return
            }

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print("response = \(response)")

            }

            let responseString = String(data: data, encoding: .utf8)
            print("responseString = \(responseString)")
            self.lbl.text = responseString
        }
        task.resume()
        //return responseString

    }

1 Ответ

0 голосов
/ 26 апреля 2019

Вам нужно использовать DispatchQueue.main.async для работы с пользовательским интерфейсом из URLRequests.Также вам нужно использовать [weak self] для предотвращения проблемы reference cycle.Наконец, btn.setTitle(responseString, for: .normal), чтобы установить заголовок для состояния кнопки .normal.Вот правильный ответ!

func makePostCall() {
        var request = URLRequest(url: URL(string: "MyURL/page.php")!)
        request.httpMethod = "POST"
        let postString = "id=login"
        request.httpBody = postString.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) {[weak self] data, response, error in
            guard let data = data, error == nil else {                                                 // check for fundamental networking error
                print("error=\(error)")
                return
            }

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print("response = \(response)")

            }

            guard let responseString = String(data: data, encoding: .utf8) else {
                  return
            }
            print("responseString = \(responseString)")
            DispatchQueue.main.async {
                self?.lbl.text = responseString
                self?.btn.setTitle(responseString, for: .normal) // your button
            }
        }
        task.resume()
        //return responseString

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...