Запрос на отправку всегда завернут дополнительным текстом

У меня очень похожая проблема, как в том, почему тело запроса HTTP-сообщения всегда завернуто дополнительным текстом в приложении Swift, но я не могу применить решение из этого потока к моему коду, потому что у меня нет request.setValue. Кто-нибудь знает, что мне нужно сделать, чтобы избавиться от Необязательного? Мой код:

@IBAction func LoginButtonTapped(sender: UIButton) { let username = UsernameTextField.text let password = PasswordTextField.text if(username!.isEmpty || password!.isEmpty) {return; } let request = NSMutableURLRequest (URL: NSURL(string: "http://myip/loginregister.php")!) request.HTTPMethod = "POST" let postString = "username=\(username)&password=\(password)" request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in guard error == nil && data != nil else { // check for fundamental networking error print("error=\(error)") return } let data = postString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! do { if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary { let success = json["success"] as? Int // Okay, the `json` is here, let's get the value for 'success' out of it print("Success: \(success)") } else { let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding) // No error thrown, but not NSDictionary print("Error could not parse JSON: \(jsonStr)") } } catch let parseError { print(parseError) // Log the error thrown by `JSONObjectWithData` let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding) print("Error could not parse JSON: '\(jsonStr)'") } } task.resume() 

Вы должны развернуть значение, когда сначала получите текст из UITextField, потому что свойство text UITextField допускает nil

 let username = UsernameTextField.text! let password = PasswordTextField.text! 

Объясни подробней

Когда вы разворачиваете text UITextField, username и password будут not nil . Код сравнения пустым должен быть:

 if(username.isEmpty || password.isEmpty) {return } 

Если вы не разворачиваете, когда вы используете это "\(username)" , вы пытаетесь преобразовать nil объект в строку, поэтому результат строки будет добавлен с текстом «Необязательный».

Чтобы решить проблему с Content-Type для запроса

Вставьте эту строку в свой код. Я не считаю, что у вас нет метода setValue .

 request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"Content-Type")