Глядя на передачу функции в качестве параметра (например, onCompletion), который будет вызываться как часть вызова функции в Swift (аналогично закрытию javascript). Какая здесь самая лучшая практика?
Код:
func didFinishFunc(onCompletion: func) {
func()
}
func onCompletionFunc()
{
print("completed.")
}
func caller()
{
didFinishFunc(onCompletion: onCompletionFunc)
}
// caller is called
caller()
Вы можете определить свою функцию следующим образом.
func didFinishFunc(onCompletion: () -> Void) {
// your function implementation here
onCompletion()
}
Эта функция принимает в качестве параметра замыкание (иногда называемое обратным вызовом или анонимной функцией на других языках). Это закрытие не имеет параметров и никакого возвращаемого значения.
Если вы хотите, чтобы у закрытия были параметры, вы могли бы сделать что-то вроде этого:
func didFinishFunc(onCompletion: (String, Int) -> Void) {
// your function implementation here
onCompletion("foo", 5)
}
Эта функция принимает два параметра: String
и Int
.
Если вы хотите, чтобы у закрытия был тип возврата, измените тип (над ним Void
) после ->
.
Используйте быстрое закрытие. Например
func didFinishFunc(onCompletion handler: () -> Void) {
handler()
}