sendAsynchronousRequest在iOS 9(Swift 2)中已弃用-传输代码



我使用的是XCode 7.3。这是我的代码:

func postToServerFunction() {
    let url: NSURL = NSURL(string: "http://mytesturl.com")!
    let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
    //let textfeld = String(UserTextField.text)
    let bodyData = "data=" + UserTextField.text!
    request.HTTPMethod = "POST"
    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())
    {
        (response, data, error) in}}

这很好用,我的php脚本得到了它应该得到的字符串。但是sendAsynchronousRequest在iOS 9中已弃用消息正如我所读到的,Swift 2的方法已经改变了。我搜索了很多这个错误,但我无法将它匹配的代码转换为Swift 2。正如我所读到的,我应该使用类似于的东西

let session = NSURLSession.sharedSession()
session.dataTaskWithRequest(request)

但我无法把它放下。事实上,我并不理解每一行。代码是我自己写的,但从一些例子来看,它对我有效。

这是使用共享会话的最基本方式:

if let url = NSURL(string: "http://mytesturl.com"),
       userField = UserTextField.text {
    let request = NSMutableURLRequest(URL: url)
    let bodyData = "data=" + userField
    request.HTTPMethod = "POST"
    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)
    let session = NSURLSession.sharedSession()
    let dataTask = session.dataTaskWithRequest(request,completionHandler: {(data,response,error) in

        }
    )
    dataTask.resume()
}

有关其他方法的更多详细信息,包括后台会话和临时会话,以及如何处理NUSRLResponse,请参阅我的博客文章。

正如您所发现的,NSURLConnection已经被弃用,而NSURLSession是新的亮点。

为了使您的示例发挥作用,您仍然需要使用已经创建的NSURLNSURLRequest,然后您需要一个可以以各种方式使用的NSURLSession

我可以看到你已经使用了回调,所以在你的情况下,我认为它将是

session.dataTaskWithRequest(request) { (data, response, error) in
    //magic goes here
}

然后需要记住的重要事项是在执行任务时调用resume()

所以。。。为了翻译你的代码,我在想一些类似的事情

func postToServerFunction() {
    let url: NSURL = NSURL(string: "http://mytesturl.com")!
    let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
    //let textfeld = String(UserTextField.text)
    let bodyData = "data=" + UserTextField.text!
    request.HTTPMethod = "POST"
    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)
    let session = NSURLSession.defaultSession()
    let task = session.dataTaskWithRequest(request) { (data, response, error) in
        //magic goes here
    }
    task.resume()
}

您可以在本教程中从raywenderlich.com 阅读更多关于NSURL会话的信息

希望对有所帮助