2015-05-06 3 views
0

Есть ли способ пропускать блоки по ссылке? Ниже кода выводит «Блок ноль»Передать по ссылке для блоков

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    void (^block)(void) = nil; 
    [self assignBlock:block]; 

    if (block) {block();} 
    else{NSLog(@"Block is nil");} 

    return YES; 
} 

- (void)assignBlock:(void (^)(void))blockToAssign 
{ 
    blockToAssign = ^(void){ 
     NSLog(@"Block assigned"); 
    }; 
} 

ответ

1

Да, вы можете сделать это. Объявите тип:

typedef void (^MyBlock)(); 

переопределять функцию assignBlock получения указателя:

- (void)assignBlock:(MyBlock *)blockToAssign 
{ 
    // assign the object pointing, not the pointer 
    *blockToAssign = ^(void){ 
     NSLog(@"Block assigned"); 
    }; 
} 

Теперь инициализировать блок, используя тип:

MyBlock block = nil; 

При вызове функции передать адрес блок:

[self assignBlock:&block]; 

if (block) {block();} 
else{NSLog(@"Block is nil");} 
+0

Perfec т! Я предположил, что вы могли бы, но не могли понять синтаксис. Благодаря! –

+1

@ErikRodriguez: правильным расширенным синтаксисом будет '- (void) assignBlock: (void (^ *) (void)) blockToAssign' – newacct

Смежные вопросы