bkw*_*ero 0 chaining completionhandler swift
我将一些函数链接在一起,一旦所有函数都运行完毕,我无法弄清楚如何使用返回值调用完成处理程序。
func getAirQuality(completion: (aqi: Int?) -> Void) {
callAPI()
}
private func callAPI() {
// ... get data
self.parseDataForAQI(data: data)
}
private func parseDataForAQI(data: Data) {
let aqi = aqi
// Send aqi up to completion handler in getAirQuality
}
Run Code Online (Sandbox Code Playgroud)
所以当一切都说完后,我可以做这样的事情:
getAirQuality(completion: { aqi -> Void in {
// Do something with aqi
})
Run Code Online (Sandbox Code Playgroud)
我的第一个假设是你的前 3 个函数是一个类的一部分。如果是这样,一种方法是将完成处理程序保存为实例变量。
class AirQualityProvider {
var aBlock: ((Int?) -> Void)?
func getAirQuality(completion: @escaping (Int?) -> Void) {
aBlock = completion
callAPI()
}
private func callAPI() {
let data = Data()
parseDataForAQI(data: data)
}
private func parseDataForAQI(data: Data) {
let aqi = 1
if let completion = aBlock {
completion(aqi)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是在操场上编写的调用者示例。
let aqp = AirQualityProvider()
aqp.getAirQuality { (value) in
if let value = value {
print("Value = \(value)")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
864 次 |
| 最近记录: |