谁将参数传递给了编译处理程序闭包的参数?


func startUpdates(from start: Date, 
withHandler handler: @escaping CMPedometerHandler)
typealias CMPedometerHandler = (CMPedometerData?, Error?) -> Void

上述功能从iOS设备检索计步器数据。当我调用函数时,我需要传递给的唯一参数是参数from start

谁实际初始化了完成处理程序闭包的参数列表?我调用的startUpdates函数?

当我调用函数时,我需要传递给的唯一参数是 start 的参数

那不是真的。

您还必须将闭包作为第二个参数传递。闭包本身由startUpdates函数在完成其工作后调用,并将两个参数(可选Data和可选的Error实例(传递回去。

函数式编程是一种非常方便的运行任意代码的方法(在闭包中(。

您可以单独声明关闭

let result : CMPedometerHandler = { data, error in
if let error = error { print(error); return }
// do something with the data 
}
startUpdates(from: Date(), withHandler: result)

或内联

startUpdates(from: Date(), withHandler: { data, error in
if let error = error { print(error); return }
// do something with the data 
})

或使用尾随闭包语法

startUpdates(from: Date()) { data, error in
if let error = error { print(error); return }
// do something with the data 
}

最新更新