【发布时间】:2015-03-19 06:13:52
【问题描述】:
我遇到过这段代码:
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>")
}
我对@987654323@ 部分感到困惑。在我看来,它已经是一个完整的函数调用(webServer.addHandlerForMethod("GET", path: "/hello", requestClass: GCDWebServerRequest.self))。因此我不明白为什么它后面跟着一个闭包({(request) -> ...)
编辑:澄清我不明白的地方
根据https://github.com/swisspol/GCDWebServer上的文档,obj-c中的函数签名是:
[webServer addDefaultHandlerForMethod:@"GET"
requestClass:[GCDWebServerRequest class]
asyncProcessBlock:^(GCDWebServerRequest* request, GCDWebServerCompletionBlock completionBlock) {
因此,我希望它的 swift 对应物将被称为有点像这样:
webServer.addHandlerForMethod("GET", path: "/hello", requestClass: GCDWebServerRequest.self, { (request) -> GCDWebServerResponse! in
return GCDWebServerDataResponse(HTML: "<html><body><p>Hello World</p></body></html>")
})
即传入请求的处理作为第三个参数传递。但是由于闭包是在闭包 ')' 之后出现的,所以它看起来根本不像函数调用的一部分。
为什么函数签名是这样从obj-c映射到swift的?
【问题讨论】:
标签: swift gcdwebserver