wake-up-neo.com

Implementieren einer Methode, die einen Block als Rückruf verwendet

Ich würde gerne eine ähnliche Methode schreiben:

+(void)myMethodWithView:(UIView *)exampleView completion:(void (^)(BOOL finished))completion;

Grundsätzlich habe ich die Syntax einer der Klassenmethoden von Apple für UIView reduziert:

+ (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 ich das umsetzen kann? Wenn jemand mich auf die richtige Dokumentation hinweisen 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 das überhaupt der richtige Ansatz ist!

Ich habe ein grobes Beispiel für das, was ich erwartet hätte, in die Implementierungsdatei aufgenommen, aber da ich keine Informationen finde, 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!
    }

}
69
Chris

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);
    }
}
84
omz

Ich würde Ihnen wärmstens empfehlen, sich über Blöcke zu informieren, um zu verstehen, was passiert.

5
Chaitanya Gupta

Wenn Sie speziell nach einem Dokument suchen, um mithilfe von Blöcken eine benutzerdefinierte Methode zu erstellen, wird über den folgenden Link fast alles erklärt. :)

http://developer.Apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxUsing.html

Ich beantworte in letzter Zeit eine ziemlich ähnliche Frage. Sehen Sie sich dies an: Deklarieren Sie einen Blockmethodenparameter ohne Verwendung eines typedef