如何在 Objective-C 中的变量中放置块(闭包)?

How do a put a block (closure) in a variable in Objective-C?

提问人:screenMonkey MonkeyMan 提问时间:1/28/2020 最后编辑:CœurscreenMonkey MonkeyMan 更新时间:2/10/2020 访问量:400

问:

习惯了 Swift,我已经处理过一些闭包。我现在正在尝试将其转换为 Objective-C。我设法创建了一个简单的,如下所示:parametersvariablesblock

-(void)myFunc:(void(^)(void))callback {
    callback();
}

viewDidLoad()

[self myFunc:^{
        NSLog(@"🦋MyCallBack");
    }];

现在我想把 .在 Swift 中,它会是这样的:blockvariable

定义variable

var completionHandler: (() -> ())?

在 A 或其他任何内容中将其用作补全:function

DispatchQueue.main.async {
    self.completionHandler?()
}

而实际上callback

completionHandler = { 
     //DOSTUFF
}

这将如何转化为 Objective-C?

比如...声明

void (^completion)(void); 

使用(这似乎不对。我收到一条警告,指出它未使用)

completion;

callback

completion = ^void(void){
    NSLog(@"😁YAY");
};

那么还缺少什么呢?

iOS Objective-C 闭包块

评论

1赞 Paulw11 1/28/2020
goshdarnblocksyntax.com

答:

-2赞 screenMonkey MonkeyMan 1/28/2020 #1

好的,所以主要问题是它应该在里面运行,我在我的版本上做了一些事情,但由于某种原因错过了这里。completiondispatch_asyncswift

dispatch_async(dispatch_get_main_queue(), ^(void){
            completion();
        });