2016-10-02 51 views
2

我发现这个真棒答案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。

我看过一堆视频,其中人们拥有与我一样的代码,并且不使用完成处理程序并仍然获取数据...什么给了?

+0

的可能的复制[我怎么能建立与斯威夫特完成处理程序的功能?(http://stackoverflow.com/questions/30401439/how-could- i-create-a-function-with-a-completion-handler-in-swift) –

+1

你正在调用一个异步方法,所以如果你想返回数据,你的函数还必须包含一个完成处理程序作为参数。如果你想同步使用NSURL,那么有一个扩展就是这么做的。 http://stackoverflow.com/questions/26784315/can-i-somehow-do-a-synchronous-http-request-via-nsurlsession-in-swift – Sealos

+0

你能解释一下你究竟在做什么吗? ?你想用'responseString'做什么? –

回答

2

这个工作在迅速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() 
    } 
} 
+1

太棒了!谢谢你! –