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

ayf*_*fer 0 closures objective-c ios swift swiftui

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

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

zey*_*tin 7

在 Objective-C 语言中

void (^closureA)(void) = ^{ };   
Run Code Online (Sandbox Code Playgroud)

使用 Swift 语言

let closureB: () -> ()
        
let closureC: () -> Void
Run Code Online (Sandbox Code Playgroud)


ska*_*aak 5

由于您要求所有,并且由于 C 在 Objective-C 的范围内并且由于您没有指定参数,因此这也可以完成工作。

void ( * f ) ( void );       // C function pointer
Run Code Online (Sandbox Code Playgroud)

以上纯粹是学术性的,以下是娱乐性的,但是你可以做到以下几点!

        // 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 ();
Run Code Online (Sandbox Code Playgroud)

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