Реакция ввода формы отображает данные, которые нельзя изменить

Компилятор жалуется на

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)
0
задан imkeVr 20 March 2019 в 18:39
поделиться