How to simplify callback logic with a Block?

前端 未结 3 1454
一生所求
一生所求 2020-11-29 17:30

Let\'s say I need to communicate with a class that provides a protocol and calls delegate methods when an operation is complete, as so:

@protocol SomeObjectD         


        
3条回答
  •  没有蜡笔的小新
    2020-11-29 18:23

    You could do something like this:

    typedef void (^AZCallback)(NSError *);
    
    AZCallback callback = ^(NSError *error) {
      if (error == nil) {
        NSLog(@"succeeded!");
      } else {
        NSLog(@"failed: %@", error);
      }
    };
    
    SomeObject *o = [[SomeObject alloc] init];
    [o setCallback:callback]; // you *MUST* -copy the block
    [o doStuff];
    ...etc;
    

    Then inside SomeObject, you could do:

    if ([self hadError]) {
      callback([self error]);
    } else {
      callback(nil);
    }
    

提交回复
热议问题