Тип вашей work
необходимой работы закрытия:
var work: ((Int, _ completionHandler: () -> ()) -> ())?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Use optional chaining here to unwrap work before calling
work?(1, {
// This now works.
})
workAsMethod(amount: 1) {
// Works.
}
work = { (amount, completionHandler) in
// This now works
completionHandler()
}
return true
}
func workAsMethod(amount: Int, completionHandler: @escaping (() -> ())) {
// Works
completionHandler()
}
work
- это дополнительное закрытие, которое принимает Int
и () -> ()
и ничего не возвращает -> ()
.
Если вы укажете свой тип для work
, ваш completionHandler
будет иметь тип (() -> ()) -> ()
, что означает, что ваш completionHandler
принимает закрытие () -> ()
и ничего не возвращает.Вы хотите, чтобы ваш completerHandler
не принимал никаких параметров.Из-за неуместных (
и )
ваш work
был фактически необязательным кортежем , а не типом закрытия.