如何理解此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!")
}