Я пришел через этот код:Как понять этот тестовый код быстрого кода 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 setupWebServer() {
webServer.addHandlerForMethod("GET", path: "/hello", requestClass: GCDWebServerRequest.self) { (request) -> GCDWebServerResponse! in
return GCDWebServerDataResponse(HTML: "<html><body><p>Hello World</p></body></html>")
}
Я смущен webServer.addHandlerForMethod
части. Мне кажется, что это уже полный вызов функции (webServer.addHandlerForMethod("GET", path: "/hello", requestClass: GCDWebServerRequest.self)
). Поэтому я не понимаю, почему это сопровождается закрытием ({(request) -> ...
)
EDIT: Уточнить, что я не понимаю,
Согласно документации по https://github.com/swisspol/GCDWebServer, сигнатура функции в Obj-C является:
[webServer addDefaultHandlerForMethod:@"GET"
requestClass:[GCDWebServerRequest class]
asyncProcessBlock:^(GCDWebServerRequest* request, GCDWebServerCompletionBlock completionBlock) {
Поэтому я ожидаю его быстры аналог будет называться примерно так:
webServer.addHandlerForMethod("GET", path: "/hello", requestClass: GCDWebServerRequest.self, { (request) -> GCDWebServerResponse! in
return GCDWebServerDataResponse(HTML: "<html><body><p>Hello World</p></body></html>")
})
т. Е. Обработка входящего запроса передается в качестве третьего параметра. Но поскольку закрытие происходит после закрытия ')', оно вообще не похоже на часть вызова функции.
Почему сигнатура функции сопоставляется с obj-c так быстро?
Спасибо большое, и я ценю ваш ответ! Однако я думаю, что мой вопрос больше связан с этой конкретной формой синтаксиса, а не с тем, что делает код. Я обновил свой вопрос, чтобы уточнить, чего я не понимаю. –