繁体   English   中英

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

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

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

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

在 Objective-C 语言中

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

使用 Swift 语言

let closureB: () -> ()
        
let closureC: () -> Void

由于您要求所有,并且由于 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 块和函数指针之间的等效性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM