如何理解此GCDWebServer swift单元测试代码?
我遇到了以下代码:如何理解此GCDWebServer swift单元测试代码?,swift,gcdwebserver,Swift,Gcdwebserver,我遇到了以下代码: class WebServerTests: XCTestCase { let webServer: GCDWebServer = GCDWebServer() var webServerBase: String! /// Setup a basic web server that binds to a random port and that has one default handler on /hello private func set
class WebServerTests: XCTestCase {
let webServer: GCDWebServer = GCDWebServer()
var webServerBase: String!
/// Setup a basic web server that binds to a random port and that has one default handler on /hello
private func setupWebServer() {
webServer.addHandlerForMethod("GET", path: "/hello", requestClass: GCDWebServerRequest.self) { (request) -> GCDWebServerResponse! in
return GCDWebServerDataResponse(HTML: "<html><body><p>Hello World</p></body></html>")
}
因此,我预计它的swift对应物将被称为:
webServer.addHandlerForMethod("GET", path: "/hello", requestClass: GCDWebServerRequest.self, { (request) -> GCDWebServerResponse! in
return GCDWebServerDataResponse(HTML: "<html><body><p>Hello World</p></body></html>")
})
webServer.addHandlerForMethod(“GET”,路径:“/hello”,请求类:GCDWebServerRequest.self,{(请求)->GCDWebServerResponse!in
返回GCDWebServerDataResponse(HTML:“helloworld”)
})
i、 e.传入请求的处理作为第三个参数传递。但是,由于闭包在闭包“')之后,因此它看起来根本不像函数调用的一部分
为什么函数签名以这种方式从obj-c映射到swift?关闭是处理传入请求的地方。当请求
/hello
路径的GET
方法出现时,它告诉服务器运行闭包的代码
在您发布的代码中,闭包中的代码创建服务器返回的响应。在Swift中,如果函数的最后一个参数是闭包,则可以使用此语法。下面是(向下滚动到尾部闭包)中的示例: 还有一张便条: 如果提供了闭包表达式作为函数的唯一参数,并且提供了该表达式作为尾随闭包,则在调用函数时,不需要在函数名后写一对括号() 这意味着写下以下内容也是合法的:
someFunctionThatTakesAClosure {
// closure body
}
…这有助于提供良好的元编程语法。例如:
let lock = NSLock()
func locked(closure: () -> ()) {
lock.lock();
closure()
lock.unlock();
}
locked {
NSLog("Hello, world!")
}
非常感谢,我感谢你的回答!然而,我认为我的问题更多的是关于这种特殊形式的语法,而不是代码的作用。我已经更新了我的问题,以澄清我不理解的地方。
someFunctionThatTakesAClosure {
// closure body
}
let lock = NSLock()
func locked(closure: () -> ()) {
lock.lock();
closure()
lock.unlock();
}
locked {
NSLog("Hello, world!")
}