Suche…


Syntax

  • Als Variable:

    returnType (^ blockName) (parameterTypes) = ^ returnType (parameter) {...};

  • Als Eigenschaft:

    @ property (nonatomic, copy) returnType (^ blockName) (parameterTypes);

  • Als Methodenparameter:

    - (void) methodWithBlock: (returnType (^) (parameterTypes)) blockName;

  • Als typedef:

    typedef returnType (^ TypeName) (parameterTypes);

    Typname blockName = ^ returnType (Parameter) {...};

UIView Animationen

[UIView animateWithDuration:1.0
    animations:^{
        someView.alpha = 0;
        otherView.alpha = 1;
    }
    completion:^(BOOL finished) {
    [someView removeFromSuperview];
}];

Das Carat-Zeichen "^" definiert einen Block. Zum Beispiel ist ^{ … } ein Block. Genauer gesagt, ist dies ein Block, der "void" zurückgibt und keine Argumente akzeptiert. Es ist äquivalent zu einer Methode wie: "- (void) etwas;", aber dem Codeblock ist kein inhärenter Name zugeordnet.

Definieren Sie einen Block, der Argumente akzeptieren kann, die sehr ähnlich funktionieren. Um einem Block ein Argument zu geben, definieren Sie den Block folgendermaßen: ^ (BOOL someArg, NSString someStr) {…} *. Wenn Sie API-Aufrufe verwenden, die Blöcke unterstützen, schreiben Sie Blöcke, die ähnlich aussehen, insbesondere für Animationsblöcke oder NSURLConnection-Blöcke, wie im obigen Beispiel gezeigt.

Benutzerdefinierter Abschlussblock für benutzerdefinierte Methoden

1- Definieren Sie Ihren eigenen benutzerdefinierten Block

typedef void(^myCustomCompletion)(BOOL);

2- Erstellen Sie eine benutzerdefinierte Methode, die Ihren benutzerdefinierten Abschlussblock als Parameter verwendet.

-(void) customMethodName:(myCustomCompletion) compblock{
    //do stuff
    // check if completion block exist; if we do not check it will throw an exception
    if(complblock)
       compblock(YES);
  }

3- Verwendung des Blocks in Ihrer Methode

[self customMethodName:^(BOOL finished) {
if(finished){
    NSLog(@"success");
}
}];

Erfasste Variable ändern

Block erfasst Variablen, die im gleichen lexikalischen Bereich angezeigt wurden. Normalerweise werden diese Variablen als "const" -Wert erfasst:

int val = 10;
void (^blk)(void) = ^{
    val = 20; // Error! val is a constant value and cannot be modified!
};

Um die Variable zu ändern, müssen Sie den Modifizierer __block storage type verwenden.

__block int val = 10;
void (^blk)(void) = ^{
    val = 20; // Correct! val now can be modified as an ordinary variable.
};


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow