Может кто-нибудь объяснить мне, почему определенный код, который я вижу, имеет функции, встроенные в функции? - PullRequest
2 голосов
/ 10 ноября 2011

Например, я бы увидел следующее:

- (void) updateNotesView:(BOOL)visible animated:(BOOL)animated{

    void (^animations)(void) = ^{
        if (visible)
        {
            //do something
        }
        else
        {
            //do something
        }
     };


    void (^completion)(BOOL) = ^(BOOL finished){
        self.showingNotesView = visible;

        if (!visible)
        {
            //do something
        }
    };

}

Я не получаю код, который говорит:

void (^animations)(void) 

или

void (^completion)(BOOL) = ^(BOOL finished)

Может кто-нибудь объяснить, пожалуйста?

1 Ответ

1 голос
/ 10 ноября 2011

Это то, как вы определяете переменную, которая будет блоком или в некоторых других случаях указатели на функции, как в c.

int (*pt2Function)(float, char, char) = NULL;   

if (pt2Function)
    pt2Function(5.0f, 'a', 'b');


 NSArray* array = [NSArray arrayWithObjects:@"a",@"b", nil];



void(^enumerateBlock)(id,NSUInteger,BOOL*) = ^(id obj, NSUInteger idx, BOOL *stop) {
    // some code
};

[array enumerateObjectsUsingBlock:enumerateBlock];

// OR

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
   // inline block 
}];

// using a typedef for code neatness

typedef void(^typedefBlockVar)(id,NSUInteger,BOOL*);

typedefBlockVar myEnumrateBlock = ^(id obj, NSUInteger idx, BOOL *stop) {
    // some code
};

[array enumerateObjectsUsingBlock:myEnumrateBlock];
...