在iOS 9(Swift 2)中不推荐使用sendAsynchronousRequest - 传输代码?

时间:2016-04-13 08:04:05

标签: ios swift2 nsurlconnection deprecated nsurl

我正在使用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获取它应该的字符串。但是有 iOS 9中已弃用sendAsynchronousRequest 信息。 正如我读到的,使用Swift 2,方法已经改变。 我搜索了很多这个错误,但我无法将它匹配的代码转换为Swift 2.我也读过,我应该使用这样的东西

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

但是我无法理解。实际上,我不了解每一行。我自己写了代码,但是从一些例子来看它对我有用。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

正如您所发现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会话

希望有所帮助