【发布时间】:2016-05-14 18:04:22
【问题描述】:
在我编写的一个使用 WeatherUnderground 的类中,我需要许多与此函数几乎相同的函数,在这种形式下可以正常工作:
func currentConditions(completion: (result: WUConditionResponse?) -> Void) -> Request {
url = urlBuilder("conditions")
let request = Alamofire.request(.GET, url)
.validate()
.responseObject { (response: Result<WUConditionResponse, NSError>) in
completion(result: response.value)
}
return request
}
我没有单独写它们,而是尝试了这个:
private typealias AFCompletion = (result: EVObject?) -> Void
private func current(command: String, onCompletion: AFCompletion) -> Request {
let function = {(completion: AFCompletion) -> Request in
self.url = self.urlBuilder(command)
let request = Alamofire.request(.GET, self.url)
.validate()
.responseObject { (response: Result<EVObject, NSError>) in
completion(result: response.value!)
}
return request
}
return function(onCompletion)
}
紧随其后
func currentConditions(completion: (result: WUConditionResponse?) -> Void) -> Request {
let myCompletion = completion as! AFCompletion
return current("conditions", onCompletion: myCompletion)
}
其中WUConditionResponse 是EVObject 的子类。然后,我将构造与语句一起使用,与工作内容相同:
foo.currentConditions { (conditions: WUConditionResponse?) in
print(conditions)
}
通过这种方式,我在向下转换到 AFCompletion 时收到 EXC_BAD_INSTRUCTION 错误。我不知所措。为什么沮丧的故障?尽管有完整的答案,我该如何进一步调试?
【问题讨论】: