我很难理解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块和函数指针之间的等价性。