Кто передавал аргументы в параметры закрытия обработчика завершений? - PullRequest
0 голосов
/ 25 августа 2018
func startUpdates(from start: Date, 
      withHandler handler: @escaping CMPedometerHandler)

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

Приведенная выше функция извлекает данные шагомера с вашего устройства iOS. Когда я вызывал функцию, единственный аргумент, который мне нужно было передать, это параметр from start.

Кто на самом деле инициализировал список параметров закрытия обработчика завершения? startUpdates функцию, которую я вызвал?

1 Ответ

0 голосов
/ 25 августа 2018

Когда я вызывал функцию, единственный аргумент, который мне нужно передать - это параметр с начала

Это не так.

Выдолжны также передать закрытие как второй параметр.Само замыкание вызывается функцией 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 

}
...