Компилятор жалуется на
var completionHandler: (Float)->Void = {}
, поскольку правая сторона не является замыканием соответствующей сигнатуры, т. е. замыкание, принимающее аргумент float. Следующее будет назначать замыкание «ничего не делать» обработчику завершения:
var completionHandler: (Float)->Void = {
(arg: Float) -> Void in
}
, и это может быть сокращено до
var completionHandler: (Float)->Void = { arg in }
из-за автоматического вывода типа.
Но вы, вероятно, хотите, чтобы обработчик завершения инициализировался на nil
таким же образом, что переменная экземпляра Objective-C инициализирована на nil
. В Swift это может быть реализовано с помощью optional :
var completionHandler: ((Float)->Void)?
Теперь свойство автоматически инициализируется nil
(«no value»). В Swift вы использовали бы необязательную привязку для проверки обработчика завершения, имеет значение
if let handler = completionHandler {
handler(result)
}
или дополнительную цепочку:
completionHandler?(result)
Ваша функция handleChange требует e, но ваша модель передает ее e.target.value.