То, что вы видите, это синтаксис Objective-C block .Синтаксис полностью тупой, разочаровывающий и ошеломляющий, но на самом деле он очень прост.
Блок логически эквивалентен замыканию в других языках, таких как JavaScript, поэтому, игнорируя неприятный синтаксис, вы можете думать, что подпись является чем-то вроде:
function transitionWithView(view, duration, options, animationFunction, onComplete);
... где animationFunction
и onComplete
- замыкания (или блоки, если использовать язык Objective-C).В основном вы можете думать о них как о функциональных указателях, которые сохраняют состояние контекста, в котором они созданы.
В любом случае, токен (^)
в Objective-C просто обозначает блок.Тип, предшествующий ему, обозначает тип возвращаемого значения блока (поэтому void
в вашем примере означает, что ни один блок не возвращает значение), а типы, следующие за ним в скобках, обозначают любые аргументы, которые принимает блок (так что ни один дляanimations
и BOOL
, называемые «готово» для блока completion
.