gpt4 book ai didi

swift - 插入函数作为参数

转载 作者:行者123 更新时间:2023-11-30 10:04:15 25 4
gpt4 key购买 nike

我现在正在对我的 Alamofire 代码进行单元测试。我试图创建一个可重用的方法,我可以传入状态代码和需要作为参数调用的方法。我正在考虑使用关闭 block ,但语法让我无法理解,而且我从 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”中。

我希望我的最终目标是明确的,如果我偏离了轨道,我愿意接受建议。 :)

最佳答案

要创建一个 block ,请执行以下操作:

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
}
}
}

不过,您可能需要考虑一下使用 block 的决定。从“我希望能够使 'test_networkRequest' 在我的所有类中可重用...”这句话来看,这听起来像是作为父类(super class)中的函数更好。

关于swift - 插入函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36924713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com