如何在 Swift 中使用完成处理程序链接函数?
How to chain functions with a completion handler in Swift?
我正在将一些函数链接在一起,我不知道如何在所有函数完成后调用具有 return 值的完成处理程序 运行。
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
}
所以当一切都说完了我就可以做这样的事情了:
getAirQuality(completion: { aqi -> Void in {
// Do something with aqi
})
我的第一个假设是您的前 3 个函数是 class 的一部分。如果是这样,一种方法是将完成处理程序保存为实例变量。
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)
}
}
}
这里有一个写在操场上的调用者的例子。
let aqp = AirQualityProvider()
aqp.getAirQuality { (value) in
if let value = value {
print("Value = \(value)")
}
}
我正在将一些函数链接在一起,我不知道如何在所有函数完成后调用具有 return 值的完成处理程序 运行。
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
}
所以当一切都说完了我就可以做这样的事情了:
getAirQuality(completion: { aqi -> Void in {
// Do something with aqi
})
我的第一个假设是您的前 3 个函数是 class 的一部分。如果是这样,一种方法是将完成处理程序保存为实例变量。
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)
}
}
}
这里有一个写在操场上的调用者的例子。
let aqp = AirQualityProvider()
aqp.getAirQuality { (value) in
if let value = value {
print("Value = \(value)")
}
}