objective-c - para - tutorial django
Implementando un método tomando un bloque para usar como devolución de llamada (3)
Puede llamar a un bloque como una función normal:
BOOL finished = ...;
if (completion) {
completion(finished);
}
Eso significa que la implementación de una función de bloque completa con su ejemplo se vería así:
+ (void)myMethod:(UIView *)exampleView completion:(void (^)(BOOL finished))completion {
if (completion) {
completion(finished);
}
}
Me gustaría escribir un método similar a esto:
+(void)myMethodWithView:(UIView *)exampleView completion:(void (^)(BOOL finished))completion;
Básicamente, he desglosado la sintaxis tomada de uno de los métodos de clase de Apple para UIView
:
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
Y esperaría que se usara así:
[myFoo myMethodWithView:self.view completion:^(BOOL finished){
NSLog(@"call back success");
}];
Mi pregunta es ¿cómo puedo implementar esto? Si alguien puede indicarme la documentación correcta que sería genial, y un ejemplo muy básico sería muy apreciado (o una respuesta similar en Stack Overflow, no pude encontrar ninguna). Todavía no sé lo suficiente acerca de los delegados para determinar si ese es el enfoque correcto.
He puesto un ejemplo aproximado de lo que esperaba que fuera en el archivo de implementación, pero como no puedo encontrar información, creo que funciona.
+ (void)myMethod:(UIView *)exampleView completion:(void (^)(BOOL finished))completion {
// do stuff
if (completion) {
// what sort of syntax goes here? If I''ve constructed this correctly!
}
}
Recomiendo encarecidamente que leas en Blocks para entender lo que está sucediendo.
Si está buscando especialmente un documento, para crear un método personalizado utilizando bloques, entonces el siguiente enlace es el que explica casi todo al respecto. :)
http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxUsing.html
Sucede que respondo una pregunta bastante reciente, eche un vistazo a esto: Declare un parámetro de método de bloque sin usar un typedef