Ich möchte eine ähnliche Methode schreiben:
+(void)myMethodWithView:(UIView *)exampleView completion:(void (^)(BOOL finished))completion;
Ich habe im Grunde die Syntax einer der Klassenmethoden von Apple reduziert für UIView
:
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
Und würde erwarten, dass es so verwendet wird:
[myFoo myMethodWithView:self.view completion:^(BOOL finished){
NSLog(@"call back success");
}];
Meine Frage ist, wie kann ich das umsetzen? Wenn mich jemand auf die richtige Dokumentation verweisen kann, wäre das großartig, und ein sehr einfaches Beispiel wäre sehr willkommen (oder eine ähnliche Antwort auf Stack Overflow - ich konnte keine finden). Ich weiß immer noch nicht genug über Delegierte, um festzustellen, ob dies überhaupt der richtige Ansatz ist!
Ich habe ein grobes Beispiel dafür, was ich erwartet hätte, in die Implementierungsdatei aufgenommen, aber da ich keine Informationen finden kann, ist es eine Vermutung.
+ (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!
}
}
finished
in dem Parametertyp in diesem Beispiel ziemlich unnötig ist ...Antworten:
Sie können einen Block wie eine reguläre Funktion aufrufen:
BOOL finished = ...; if (completion) { completion(finished); }
Das bedeutet, dass die Implementierung einer vollständigen Blockfunktion anhand Ihres Beispiels folgendermaßen aussehen würde:
+ (void)myMethod:(UIView *)exampleView completion:(void (^)(BOOL finished))completion { if (completion) { completion(finished); } }
quelle
completion
ist der eigentliche Block. Es ist in der Methodensignatur definiert. (void (^) (BOOL beendet)) Vervollständigung ermöglicht das Aufrufen einer Vervollständigungs () -Methode, die als Rückruf verwendet wird. Schauen Sie sich die Dokumente zu Äpfeln an: developer.apple.com/library/ios/documentation/cocoa/conceptual/…Ich würde Ihnen wärmstens empfehlen, sich über Blöcke zu informieren, um zu verstehen, was passiert.
quelle
Wenn Sie speziell nach einem Dokument suchen, um mithilfe von Blöcken eine benutzerdefinierte Methode zu erstellen, ist der folgende Link derjenige, der fast alles darüber erklärt. :) :)
http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxUsing.html
Ich beantworte in letzter Zeit eine ganz ähnliche Frage. Sehen Sie sich Folgendes an: Deklarieren Sie einen Blockmethodenparameter, ohne ein typedef zu verwenden
quelle