(Swift 2.2,Alamofire 3.0)
我有一个相当复杂的错误/状态检查协议,我在许多REST调用后应用,我自然希望重用这段代码。
Alamofire.request(.POST, "some/rest/url", params, encoding:.JSON)
.validate()
.responseJSON { response in
// This is what I'd like to do
self.myAwesomeMethod(response)
我的问题是声明myAwesomeMethod
,并根据我尝试使用的内容,生成switch语句中的常量。
当然,只是在responseJSON
关闭期间工作,一切都很糟糕:
switch response.result {
case .Failure(let error):
handleGracefully(error)
return
case .Success:
// 4. Profit
}
但是当我尝试将该开关块移动到myAwesomeMethod
时,我会被绊倒几个方向。我似乎找不到result
的正确声明,而且在我的案例中,我无法弄清楚.Failure
和.Success
的显式枚举。
我知道我们已经交了一个4元组,并且我在尝试通过源代码后试图通过多种方式宣布它。这是我的最新消息:
private func myAwesomeMethod(
afResponse: (_,
response: NSHTTPURLResponse?,
result: Result<Value, Error>?,
error: NSError?)) {
switch afResponse.result {
case .Failure(let error):
beGraceful(error)
return
case .Success:
// 4. Profit
}
...
然而,Value
中的Result<Value, Error>
让我知道了这一点:
使用未声明类型&#39;值&#39;
但是.Failure
和.Success
不再处于闭包的上下文中,它们在结果中定义,因此任何其他声明都导致无法访问它们。
我试过拆开组成部分,但这对我来说并没有真正改变问题。我一直在使用myAwesomeMethod
进行.responseJSON
来电,所以我希望我可以使用某种类型Value
来保存我。
有没有人有任何想法?
修复了@Jon Schier正确方向的推动
辅助函数的声明非常简单。我实际需要的只是以下内容:
private func myAwesomeMethod(afResponse: Response<AnyValue, NSError>)
之后,一切似乎都很开心。
答案 0 :(得分:1)
responseJSON
的实施将为您回答这个问题。这是Result<AnyObject, NSError>
。