Код, который вы указали выше, имеет неправильный синтаксис. То, что вы описываете, - это закрытие. Этот закрывающий «блок» будет выполнен (и любой код в нем) после завершения вызова функции (есть исключения из этого, поскольку некоторые функции более высокого порядка используют обработчики завершения, которые выполняются асинхронно) «Замыкания часто вызываются асинхронно, но они не работают» Это должно быть. Функции более высокого порядка, такие как map, filter, sorted и т. д. c, используют замыкания, которые вызываются синхронно. - Duncan C ".
Это особенно полезно при работе с swift, это позволяет вы выполняете указанный c код в указанное c время, когда вам нужно, чтобы это произошло.
Ниже приведен простой пример, где у вас есть анимация и некоторый код для выполнения каких-либо действий, когда это будет завершено, внутри блок завершения или «закрытие», вы можете установить параметры (если вы используете sh), чтобы затем вернуться, когда этот блок завершится. Ниже я добавил "_", это означает отсутствие параметров.
UIView.animate(withDuration: 0.5, animations: { _ in
//execute your code here
}, completion: { _ in
//THis is also a closure where you can execute code after the animation is finished.
})
Другой пример:
Вызов API функции
func foo(x: String, completion:(Bool?, String?)->Void){
//do your code here
//when code is finished assuming it is successful call completion handler
//usually there is a condition to meet so that if the api call fails the completion handler will be completionHandler(false, "failure")
completionHandler(true, "success")
}
Затем, когда вы хотите использовать эту функцию ниже, вот так ...
foo(x: "test", completionHandler: {result, response in
if result == true {
print("success")
//do extra stuff here
} else {
print("Failure")
//do extra stuff here
}
})
Объявленные переменные «response» и «result» являются предполагаемыми типами обработчика завершения в этом случае (Bool ?, String?). Эти переменные могут называться как угодно, кроме их типы предполагаются.
Надеюсь, это поможет