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

时间:2018-08-25 09:49:42

标签: ios swift functional-programming closures completionhandler

func startUpdates(from start: Date, 
      withHandler handler: @escaping CMPedometerHandler)

typealias CMPedometerHandler = (CMPedometerData?, Error?) -> Void

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

谁真正初始化了完成处理程序关闭的参数列表?我曾经调用过startUpdates函数吗?

1 个答案:

答案 0 :(得分:1)

  

当我调用该函数时,我需要传递的唯一参数是开始时的参数

那是不正确的。

您还必须将闭包作为第二个参数传递。在完成工作之后,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 

}