Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 投递到服务器的完成处理程序_Swift - Fatal编程技术网

Swift 投递到服务器的完成处理程序

Swift 投递到服务器的完成处理程序,swift,Swift,我找到了这个很棒的答案 唯一的问题是,我不知道完成后如何返回数据 如何为以下函数生成完成处理程序 func postToServer(postURL: String, postString: String) { let request = NSMutableURLRequest(URL: NSURL(string: postURL)!) request.HTTPMethod = "POST" request.HTTPBody = postString.dataUsingE

我找到了这个很棒的答案

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

如何为以下函数生成完成处理程序

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()
}
编辑:也许我没有正确应用它,但建议的重复链接并没有解决我的问题。有人能举个例子吗?我已经在这上面呆了三个星期了。我只是不知道任务完成后如何从中提取数据。我已经读了很多关于闭包的书,但我不知道它们之间有什么关系,甚至不知道它们之间有什么关系。当我尝试查找与任务相关的函数时,它只给出响应…如果我在恢复后不键入
sleep(3)
,则返回nil

我看了很多视频,人们和我有相同的代码,不使用完成处理程序,但仍然可以获取数据。。。给出了什么?

这在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()
  }
}

调用异步方法时可能存在重复,因此如果要返回数据,函数还必须包含一个完成处理程序作为参数。如果您想同步使用NSURL,那么有一个扩展可以做到这一点。你能解释一下你到底想做什么吗?你想用
响应字符串做什么
?太棒了!谢谢你,马特!