- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到过这段代码:
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) {
因此我希望它的 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 中,如果函数的最后一个参数是闭包,则可以使用此语法。这是来自 Swift language guide section about closures 的示例(向下滚动到尾随闭包):
func someFunctionThatTakesAClosure(closure: () -> ()) {
// function body goes here
}
// here's how you call this function without using a trailing closure:
someFunctionThatTakesAClosure({
// closure's body goes here
})
// here's how you call this function with a trailing closure instead:
someFunctionThatTakesAClosure() {
// trailing closure's body goes here
}
然后还有这个注释:
If a closure expression is provided as the function’s only argument and you provide that expression as a trailing closure, you do not need to write a pair of parentheses () after the function’s name when you call the function.
这意味着这样写也是合法的:
someFunctionThatTakesAClosure {
// closure body
}
… 这有助于提供一个很好的元编程语法。例如:
let lock = NSLock()
func locked(closure: () -> ()) {
lock.lock();
closure()
lock.unlock();
}
locked {
NSLog("Hello, world!")
}
关于swift - 如何理解这段 GCDWebServer swift 单元测试代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28055142/
我正在使用 GCDWebServer 在我的设备上创建 HTTP 服务器。网页的实际内容位于我的应用程序的 Documents 文件夹内。内容包含一个带有引用的 css 和 png 文件的 HTML
我正在开发一个应用程序,设备可以通过公共(public) Wi-Fi 网络相互连接和交互,并且为了文件交换的目的,我正在使用 GCDWebServer。 当我使用普通的 wi-fi 网络或设备通过第
我使用 GCDWebServer,确切地说是 WebUploader。当我在 iPhone 模拟器上测试它时,一切正常,但是在设备上,当我输入例如http://192.168.2.4:8080到浏览器
我在 iOS8 中从 WKWebView 加载本地网页时遇到问题。有一些建议我应该使用 GCDWebServer。我通读了 GCDWebServer ,但不太了解 GCDWebServer 在移动应用
我正在使用 GCDWebservers 来启动一个 http 服务。我希望它仍然在后台模式下接受连接。这是我的源代码: func startServer (){ do { we
我的 GCDWebServer 处理程序偶尔会崩溃,这些处理程序访问可变字典。 GCDWebServer 自述文件说处理程序“在 GCD 中的任意线程上执行,因此必须特别注意线程安全和可重入”,我认为
我正在使用 GCDWebServer 的 addDefaultHandlerForMethod:@"GET" 并通过以下方式发送 NSData 响应 GCDWebServerDataResponse
我尝试运行 GCDWebServer,以便从它将要运行的同一设备上访问它。 我有以下代码 import UIKit import Foundation import WebKit class View
我正在使用 GCDWebServer 的本地服务器在 WKWebView 上呈现本地 Web 内容,但由于后端有 cookie,我有一个跨源请求。我如何配置代理来解决这个问题。 注意:我已经尝试在 G
当我的应用程序进入后台时,我的 GCDWebServer (3.3.3) 崩溃了: #3 0x000000010041ea80 in -[GCDWebServer dealloc] at proje
我创建了一个小型演示应用程序,其中应用程序使用 UIImagePickerController 从 iPhone 访问图像和视频。当我选择任何图像或视频时,应用程序会在文档目录中创建它的副本(图像或视
我需要我的 Swift 2.1 应用程序来监听其他服务到达我的公共(public)端点的 HTTP POST。不确定如何初始化 GCDWebserver。 let webServer = GCDWeb
需要实现一个在 iPad 上运行的自托管 Web 服务器,看起来像 GCDWebServer是一个不错的选择。不过作者并不打算支持WebSocket,见链接here 。 问题:是否有支持 WebSoc
我遇到过这段代码: class WebServerTests: XCTestCase { let webServer: GCDWebServer = GCDWebServer() va
我正在尝试让 GCDWebServer 显示静态内容。我有代码 import UIKit import Foundation class ViewController: UIViewControlle
我有以下 JavaScript 应用程序,它从在 OSX 应用程序上运行的 GCDWebServer 接收数据。 var HttpClient = function() { this.
在我的 iOS 应用程序中,我尝试添加一个简单的 GCDWebServer重定向处理程序如下: self.webServer!.addHandlerForMethod("GET", pathR
我正在使用 GCDWebServer 类(太棒了!),想知道是否可以通过远程 IP 限制允许的连接。 server.addDefaultHandlerForMethod("GET", requestC
我想在 iOS 上用 GCDWebServer 创建一个服务器,它将接受对 localhost 的请求,然后从另一个 url 提取数据>(视频文件)并将数据流式传输到响应。我打算使用纯 NSURLCo
有没有人已经尝试在不使用包含的(很酷的)GCDWebUploader 的情况下实现 GET 请求的处理程序(POST 方法的相同问题)? 我需要服务器响应 GET 请求 http://local/do
我是一名优秀的程序员,十分优秀!