私はこのコードに出くわしました:
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) -> ...
)
編集:私が理解していないことを明確にしてください
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>")
})
つまり、着信要求の処理は 3 番目のパラメーターとして渡されます。しかし、クロージャはクロージング ')' の後に来るので、関数呼び出しの一部のようには見えません。
関数シグネチャがobj-cからswiftにこのようにマップされるのはなぜですか?