在Objective-C和Swift中,写不返回任何参数也不接受任何参数的闭包的有效方法是什么



我很难理解Swift和Objective-C中的闭包语法。

有人能告诉我用两种语言写一个不接受任何参数、不返回任何结果的闭包的所有可能方法吗?

在Objective-C语言中

void (^closureA)(void) = ^{ };   

Swift语言

let closureB: () -> ()

let closureC: () -> Void

由于您要求all,并且C在Objective-C的范围内,并且您没有指定任何参数,因此这也完成了任务。

void ( * f ) ( void );       // C function pointer

上面是纯粹的学术,下面是娱乐,但有了它,你可以做以下事情!

// Void block to void function pointer
void ( ^ block ) ( void ) = ^ {
NSLog ( @"You have been warned" );
};
void * p = & block;
long * q = ( long * )( * ( long * ) p );
long * r = q + 2; // Try 0, 1, 2 [crash crash voila!]
void ( * f ) ( void ) = ( void ( * )( void ) )( * r );
// You have been warned
f ();

这是非常危险的(也是有趣的(,但确实说明了void块和函数指针之间的等价性。

相关内容

最新更新