Post到服务器的完成处理程序

时间:2016-10-02 20:20:25

标签: swift

我找到了posting data to php

这个很棒的答案

唯一的问题是,我不知道如何在完成后返回数据。

如何为以下函数创建完成处理程序?

func postToServer(postURL: String, postString: String) {
    let request = NSMutableURLRequest(URL: NSURL(string: postURL)!)
    request.HTTPMethod = "POST"
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
        data, response, error in

        let responseString = String(data: data!, encoding: NSUTF8StringEncoding)
        if responseString != nil {
            print("responseString = \(responseString!)")
        }

    }
    task.resume()
}

编辑:也许我没有正确应用它,但建议的重复链接并没有解决我的问题。有人可以提供一个例子吗?我已经坚持了3个星期了。我不知道如何在任务完成时从任务中提取数据。我一直在阅读关于封闭的很多内容,但我不知道这些内容在哪里甚至是如何相关的。当我尝试查找与任务相关的功能时,它只会给出响应...如果我在恢复后不在sleep(3)键入,则返回nil。

我观看了一系列视频,其中人们拥有与我相同的代码,并且没有使用完成处理程序,仍然可以获取数据......是什么给出了?

1 个答案:

答案 0 :(得分:2)

这适用于swift 3

func postToServer(_ completion:@escaping (( _ response: String, _ success: Bool )-> Void), postURL: String, postString: String) {
    let request = NSMutableURLRequest(url: NSURL(string: postURL)! as URL)
    request.httpMethod = "POST"
    request.httpBody = postString.data(using: String.Encoding.utf8)

    let task = URLSession.shared.dataTask(with: request as URLRequest){
        data, response, error in

        let responseString = String(data: data!, encoding: String.Encoding.utf8)
        if responseString != nil {
            print("responseString = \(responseString!)")
            completion(responseString!, true)

        }

    }
    task.resume()
  }
}