swift 3 http запрос

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

@IBAction func submit(_ sender: AnyObject) {

let requestURL = URL(string: "*****")

let request = NSMutableURLRequest(url:requestURL!)

request.httpMethod = "POST"
let song=txt1.text!
let artist=txt2.text!
let album=txt3.text!
let year=txt4.text!
let genre=txt5.text!let songPost = "song=" + (song as String)
let artistPost = "&artist=" + (artist as String)
let albumPost = "&album=" + (album as String)
let yearPost = "&year=" + (year as String)
let genrePost = "&genre=" +  (genre as String)

request.httpBody = songPost.data(using: String.Encoding.utf8);
request.httpBody = artistPost.data(using: String.Encoding.utf8);
request.httpBody = albumPost.data(using: String.Encoding.utf8);
request.httpBody = yearPost.data(using: String.Encoding.utf8);
request.httpBody = genrePost.data(using: String.Encoding.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)")
print(response)

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)")
}
task.resume()

Возникла проблема со строкой кода urlsession.shared.datatask. Ошибка компилятора говорит «неоднозначная ссылка на member’dataTask (с: завершение обработчик :)»

Что может заставить этот код работать и как я могу убедиться, что эта информация была передана в приложение?

1

Решение

Причина, по которой вы получаете это сообщение об ошибке, заключается в том, что вы передаете NSMutableURLRequest где URLRequest нужно.

Изменение этой строки:

    let request = NSMutableURLRequest(url:requestURL!)

к этому:

    var request = URLRequest(url:requestURL!)

должен это исправить.

Но я рекомендую немного больше исправлений, чтобы ваш запрос был успешно отправлен на сервер:

    let requestURL = URL(string: "*****")

//You should use `URLRequest` in Swift 3, mutability is represented by `var`
var request = URLRequest(url:requestURL!)

request.httpMethod = "POST"
//UITextField.text can be nil, you should treat nil cases
//(Generally avoid using forced unwrapping `!` as far as you can.)
let song = txt1.text ?? ""let artist = txt2.text ?? ""let album = txt3.text ?? ""let year = txt4.text ?? ""let genre = txt5.text ?? ""
//`song`,... are all Strings, you have no need to add `as String`
let songPost = "song=" + song
let artistPost = "&artist=" + artist
let albumPost = "&album=" + album
let yearPost = "&year=" + year
let genrePost = "&genre=" + genre

//You need to make a single data containing all params
//(Creating a concatenated String and getting `data` later would be another way.)
var data = Data()
data.append(songPost.data(using: String.Encoding.utf8)!)
data.append(artistPost.data(using: String.Encoding.utf8)!)
data.append(albumPost.data(using: String.Encoding.utf8)!)
data.append(yearPost.data(using: String.Encoding.utf8)!)
data.append(genrePost.data(using: String.Encoding.utf8)!)
request.httpBody = data
let task =  URLSession.shared.dataTask(with: request) { data, response, error in
...
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]