Подключение к серверу из приложения

swift4
ios

#1

ЗДРАВСТВУЙТЕ!!! Изучаю Ваш курс на SwiftBook. Я отправляю на сервер три значения

        let userData = [
                    "LOGIN": Password.text!,
                    "PASS": Login.text!,
                    "CITY": city.text!
                    ]

Вот так я их формирую, после просмотренного видео ресурса сделал как там там объяснялось:
6. POST Requests (9:22)
И в итоге мои данные не доходят до сервера, но на этом же форуме мне давненько один человек подсказал как отправить, вот код и он рабочий

 request.httpBody = params.reduce(into: "") { str, item in
            str += (str.isEmpty ? "" : "&") + item.key + "=" + item.value
            }.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!.data(using: .utf8)

но мне хотелось бы способом из курса, что я не так делаю, и этот код не очень понятен для меня.


#2

Здравствуйте

Выложите пожалуйста код целиком, т.к. я не могу понять, что у вас не так, гляда на один словарь. Так же приложите плиз лог ошибки.


#3
class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var city: UITextField!
    @IBOutlet weak var Password: UITextField!
    @IBOutlet weak var Login: UITextField!
    
   @IBAction func postRequest(_ sender: UIButton) {
    
   // @IBAction func postRequest(_ sender: Any) {
        
        //guard let url = URL(string: "http://171.31.32.250/iosmaster/sql.php") else { return }
        
        var request = URLRequest(url: URL(string: "http://171.31.32.250/iosmaster/sql.php")!)
        
        
        //let userData = ["Course": "Networking", "Lesson": "GET and POST"]
        
    
        request.httpMethod = "POST"
   // request.addValue("text/html", forHTTPHeaderField: "Content-Type")
        
        let userData = [
            "LOGIN": Password.text!,
            "PASS": Login.text!,
            "CITY": city.text!
            ]
        request.httpBody = userData.reduce(into: "") { str, item in
            str += (str.isEmpty ? "" : "&") + item.key + "=" + item.value
            }.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!.data(using: .utf8)
    
//      guard let httpBody = try? JSONSerialization.data(withJSONObject: userData, options: []) else { return }
//        request.httpBody = httpBody
    
      
    URLSession.shared.dataTask(with: request)  { data, response, error in
    guard   let data = data else {return}
    print("Dser  \(data)")
   // print("jsdfguwihjbf\(response)")
      do {
        let json = try! JSONSerialization.jsonObject(with: data)
          
       
           print(json)
        } catch {
                print("error ")
            }
    
    
        } .resume()
    }
    
}

#4

Thread 2: Fatal error: ‘try!’ expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=3840 “Garbage at end.” UserInfo={NSDebugDescription=Garbage at end.}
он говорит что мусор в конце, но это не мусор а еще один ответ, там должно вывести несколько значений, если значение одно в базе, то все ок, если более одного то пишет такое


#5

Покажите json ответ который вы отправляете с сервера.
Может он у вас не верно сформирован и поэтому ругается.


#6

Все получилось, сам ошибся)))


#7

В чем ошибка?
У меня такая же выходит.