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

sendAsynchronousRequest was deprecated in iOS 9 (Swift 2) - Transfer Code?

我正在使用 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-Script 得到了它应该得到的字符串。但是有 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,请参阅 my blogpost

如您所知,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()
}

您可以在此 tutorial from raywenderlich.com

中阅读有关 NSURL 会话的更多信息

希望对您有所帮助