ho appena scoperto blocchi di completamento:personalizzato blocco di completamento per il mio metodo
completion:^(BOOL finished){
}];
Che cosa devo fare per avere il mio metodo di prendere un blocco di completamento?
ho appena scoperto blocchi di completamento:personalizzato blocco di completamento per il mio metodo
completion:^(BOOL finished){
}];
Che cosa devo fare per avere il mio metodo di prendere un blocco di completamento?
1) Definire un proprio blocco di completamento,
typedef void(^myCompletion)(BOOL);
2) Creazione di un metodo che prende il tuo completamento blocco come parametro,
-(void) myMethod:(myCompletion) compblock{
//do stuff
compblock(YES);
}
3) Questo è come lo si utilizza,
[self myMethod:^(BOOL finished) {
if(finished){
NSLog(@"success");
}
}];
variabili di blocco sono simili nella sintassi di funzionare puntatori in C.
Poiché la sintassi è brutto sono spesso typedefed, ma possono anche essere dichiarati normalmente.
typedef void (^MyFunc)(BOOL finished);
- (void)myMethod:(MyFunc)func
{
}
Vedere questa risposta per non typedef:
ok grazie lo controllerò, è un po 'complicato per me dove ho il typedef? – user2206906
È possibile inserire il typedef nel file di intestazione, prima dell'interfaccia '@'. –
si definisce il blocco come un tipo personalizzato:
typedef void (^ButtonCompletionBlock)(int buttonIndex);
Quindi utilizzare come un argomento di un metodo:
+ (SomeButtonView*)buttonViewWithTitle:(NSString *)title
cancelAction:(ButtonCompletionBlock)cancelBlock
completionAction:(ButtonCompletionBlock)completionBlock
Quando si chiama questo codice è proprio come qualsiasi altro blocco:
[SomeButtonView buttonViewWithTitle:@"Title"
cancelAction:^(int buttonIndex) {
NSLog(@"User cancelled");
}
completionAction:^(int buttonIndex) {
NSLog(@"User tapped index %i", buttonIndex);
}];
Se arriva il momento di far scattare il blocco, è sufficiente chiamare completionBlock()
(dove completionBlock
è il nome della vostra copia locale del blocco).
Una medaglia per te, gentile signore. – Josh
compclock (YES) è uguale a return compclock = YES? – user2206906
Sì, ce l'hai, possiamo mettere compclock (YES)/compclock (NO) a seconda dei requisiti, possiamo restituire NO per i completamenti di errori qui –
traccia il valore restituito: if (finished) NSLog (@ "success"); else NSLog (@ "failure"); –