Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 urlSession.dataTaskWithRequest(请求)的含义_Swift_Rest_Get - Fatal编程技术网

Swift urlSession.dataTaskWithRequest(请求)的含义

Swift urlSession.dataTaskWithRequest(请求)的含义,swift,rest,get,Swift,Rest,Get,当我在网络开发一章读到关于swift的书时,我遇到了一些我无法理解的代码。代码如下: let sessionTask = urlSession.dataTaskWithRequest(request) { (data, response, error) in handler(response, data) } swift中此功能的原型为: public func dataTaskWithRequest(request:

当我在网络开发一章读到关于swift的书时,我遇到了一些我无法理解的代码。代码如下:

let sessionTask = urlSession.dataTaskWithRequest(request) {
            (data, response, error) in

            handler(response, data)
            } 
swift中此功能的原型为:

public func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask

如您所见,原型有两个参数,一个是request,另一个是completionHandler。但是在上面的代码中,它也有一个参数。我也不能理解大括号中的代码,3个变量的数据,响应,错误来自哪里?我找不到这3个变量的任何定义。谁能帮我理解代码,提前谢谢

它被称为尾随闭包,如果某个函数是最后一个参数,那么它是将该函数传递给另一个函数的更简洁的方法。同样的代码可以写成:

let sessionTask = NSURLSession.sharedSession()
let request = NSURLRequest()
sessionTask.dataTaskWithRequest(request, completionHandler: {(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in

})
如果需要将闭包表达式作为函数的最终参数传递给函数,并且闭包表达式很长,那么将其作为尾随闭包编写会很有用。尾随闭包是在其支持的函数调用的括号外(和括号后)编写的闭包表达式


它被称为尾随闭包,如果一个函数是最后一个参数,那么它是一种将该函数传递给另一个函数的更简洁的方法。同样的代码可以写成:

let sessionTask = NSURLSession.sharedSession()
let request = NSURLRequest()
sessionTask.dataTaskWithRequest(request, completionHandler: {(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in

})
如果需要将闭包表达式作为函数的最终参数传递给函数,并且闭包表达式很长,那么将其作为尾随闭包编写会很有用。尾随闭包是在其支持的函数调用的括号外(和括号后)编写的闭包表达式


好的,现在我理解了尾随闭包的语法,但是3个变量data,response,error from在哪里,它们来自http请求的响应吗?3个变量data,response,error是从NSURLSession的dataTaskWithRequest方法传入的。我的意思是,当我们将参数传递给函数时,我们应该首先定义它,例如:是的,您是对的,3个变量data、response和error是在NSURLSession的dataTaskWithRequest方法的实现中定义的。顺便说一下,我可以看到你的例子。我的意思是,当我们把一个参数传递给一个函数时,我们应该首先定义它,例如:var a=90如果我们把a传递给定义为func func1(a:int)->int的函数,那么我们应该像func1(a)一样调用它。如您所见,我们在func1中传递变量a之前定义了它。类似地,我们在handler(response,data)}中调用类似{(data,response,error)的completionHandler。但是我们没有定义3个参数,为什么呢?好的,现在我理解了尾随闭包的语法,但是3个变量数据,响应,错误来自哪里,它们来自http请求的响应吗?3个变量数据,响应,错误是从NSURLSession的dataTaskWithRequest方法传入的。我的意思是,当我们将参数传递给函数时,我们应该首先定义它,例如:是的,您是对的,3个变量data、response、error是在NSURLSession的dataTaskWithRequest方法的实现中定义的。顺便说一下,我可以看到你的例子。我的意思是,当我们把一个参数传递给一个函数时,我们应该首先定义它,例如:var a=90如果我们把a传递给定义为func func1(a:int)->int的函数,那么我们应该像func1(a)一样调用它。如您所见,我们在func1中传递变量a之前定义了它。类似地,我们在handler(response,data)}中调用类似{(data,response,error)的completionHandler。但是我们没有定义这3个参数,为什么?