0
我有类A,它被设置为类B的委托。它当前如何工作是来自类A的方法,它使用类B的实例来调用方法。在B的方法执行完毕后,它调用A中实现的委托方法。如何在委托中使用完成块
想要的是让A类的方法包含一个成功完成块,这样当B的方法完成执行时,我可以从A类中的方法与B的方法成功执行相同。这可以做到吗?
我有类A,它被设置为类B的委托。它当前如何工作是来自类A的方法,它使用类B的实例来调用方法。在B的方法执行完毕后,它调用A中实现的委托方法。如何在委托中使用完成块
想要的是让A类的方法包含一个成功完成块,这样当B的方法完成执行时,我可以从A类中的方法与B的方法成功执行相同。这可以做到吗?
在A类中,将块存储为属性。在B类的委托方法中(由A类实现),您可以通过属性调用该块。
@property (nonatomic, copy) void (^completion)(BOOL);
- (void)classAMethod:(void (^)(BOOL))completion {
self.completion = completion;
[classB method];
}
- (void)classBDelegateMethod:(BOOL)result {
if(self.completion) {
self.completion(result);
}
}
您需要在调用'-classBDelegateMethod'之前检查'completion'是非'nil',否则应用程序会崩溃。您还可能想要确保您不覆盖'-classAMethod:'中的现有块,否则可能不会按预期调用块。您可能想要存储一组块。 –
更新了答案。至于完成数组,它取决于classAMethod的性质。您可能希望允许它并行运行多次,或一次执行一次执行。如果它是前者,那么完成数组是有意义的。 – Mark
@Mark我认为这是我正在寻找的。如果我想要将BOOL传递给我的classBDelegateMethod以便classAMethod获取它,我该如何更改它? – iamarnold