Что я должен передать в качестве параметра? - PullRequest
2 голосов
/ 28 июня 2011

У класса UIView есть метод класса:

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

Впервые я увидел аргумент, такой как аргументы анимации и завершения.Что я пишу в этом месте: animations: (void (^) (void)) анимации?Что означает (^) и void?

Ответы [ 2 ]

6 голосов
/ 28 июня 2011

Символ ^ обозначает блок c. Блоки - это фрагменты кода, которые выполняются всякий раз, когда функция требует этого. Я не уверен насчет параметра animations:, но блок completion: выполняется (как указано в названии), когда анимация заканчивается.

Возможный вызов может выглядеть так:

[UIView transitionWithView:myView 
                  duration:1.0 
                   options:0 
                animations:^{} /* this denotes empty block */
                completion:^{ 
                                NSLog(@"Animation has completed");
                           }
];
3 голосов
/ 28 июня 2011

То, что вы видите, это синтаксис Objective-C block .Синтаксис полностью тупой, разочаровывающий и ошеломляющий, но на самом деле он очень прост.

Блок логически эквивалентен замыканию в других языках, таких как JavaScript, поэтому, игнорируя неприятный синтаксис, вы можете думать, что подпись является чем-то вроде:

function transitionWithView(view, duration, options, animationFunction, onComplete);

... где animationFunction и onComplete - замыкания (или блоки, если использовать язык Objective-C).В основном вы можете думать о них как о функциональных указателях, которые сохраняют состояние контекста, в котором они созданы.

В любом случае, токен (^) в Objective-C просто обозначает блок.Тип, предшествующий ему, обозначает тип возвращаемого значения блока (поэтому void в вашем примере означает, что ни один блок не возвращает значение), а типы, следующие за ним в скобках, обозначают любые аргументы, которые принимает блок (так что ни один дляanimations и BOOL, называемые «готово» для блока completion.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...