【问题标题】:Objective-C Block SyntaxObjective-C 块语法
【发布时间】:2012-09-21 07:13:45
【问题描述】:

Obj-C 块是我最近第一次使用的东西。我正在尝试理解以下块语法:

在头文件中:

@property (nonatomic, copy) void (^completionBlock)(id obj, NSError *err);

在主文件中:

-(void)something{

id rootObject = nil;

// do something so rootObject is hopefully not nil

    if([self completionBlock])
        [self completionBlock](rootObject, nil); // What is this syntax referred to as?
}

感谢您的帮助!

【问题讨论】:

  • IMO,如果您使用点语法,似乎更清楚发生了什么。 if( self.completionBLock) self.completionBlock(rootObject, nil);

标签: objective-c syntax objective-c-blocks


【解决方案1】:

块就是对象。

在您的情况下,您在方法内部检查块是否不为零,然后您通过两个必需的参数调用它...

请记住,调用块的方式与调用 c 函数的方式相同......

下面我把声明分成两部分让你更好地理解:

[self completionBlock]  //The property getter is called to retrieve the block object
   (rootObject, nil);   //The two required arguments are passed to the block object calling it

【讨论】:

    【解决方案2】:

    它是一个块属性,你可以在运行时设置一个块。

    这里是要设置的语法

    由于是void类型,所以在类中可以通过以下代码设置方法

    self.completionBlock = ^(id aID, NSError *err){
        //do something here using id aID and NSError err
    };
    

    通过以下代码,您可以调用之前设置的方法/块。

    if([self completionBlock])//only a check to see if you have set it or not
    {
            [self completionBlock](aID, nil);//calling
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多