在 return 和 Swift 中什么都不接受任何参数的闭包的所有有效编写方式是什么?

What are all valid ways of writing closures that return nothing and accept no parameters in Objective-C and Swift?

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

谁能告诉我用两种语言编写一个不接受任何参数且 returns 什么都不接受的闭包的所有可能方法?

使用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 块和函数指针之间的等价性。