我现在正在测试我的Alamofire代码。我试图创建一个可重用的方法,我可以传递一个状态代码和一个需要作为参数调用的方法。我正在考虑使用一个结束块,但语法正在逃避我,并没有帮助我开始使用Swift。这是一个例子:
func parseJsonResponse(response: Response <AnyObject, NSErrror>){
//parsing
}
func test_networkRequest(withStatusCode statusCode: Int, /* parse function as parameter */) {
stub(isHost("https://httpbin.org")) { _ in
return OHHTTPStubsResponse(fileAtPath:OHPathForFile("wsresponse.json", self.dynamicType)!,
statusCode:statusCode, headers:["Content-Type":"application/json"])
})
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
.responseJSON { response in
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
XCTAsertNotNil(response)
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
//method should go here
self.parseJsonResponse(response)
}
}
我希望能够在我的所有类中重用“test_networkRequest”,并且将以各种方式解析和处理不同类型的json。这就是为什么我希望能够将函数作为参数传递给'test_networkRequest'。
我希望我的最终目标很明确,如果我偏离正轨,我愿意接受建议。 :)
答案 0 :(得分:1)
要创建一个块,请执行以下操作:
class Foo {
var block: (statusCode: Int) -> Void
var optionalBlock: ((argA: Int, argB: String) -> Bool)? // in case you're curious
init() {
block = { (statusCode: Int) -> Void in
// This is the block that can now be passed
}
}
}
您可能想要考虑使用块的决定。从句子&#34;我希望能够做出&#39; test_networkRequest&#39;可以在我所有的课程中重复使用......&#34;听起来这可能更适合作为超类中的函数。