Objective-C:变量声明后的大括号

时间:2016-06-08 14:55:52

标签: objective-c variables curly-braces

我试图更好地理解好的Objective-C / Swift实践,我现在正在阅读这篇文章:https://github.com/facebook/pop/blob/master/pop/POPAnimatableProperty.mm,来自GitHub中的Awesome-iOS repo。我不理解这两段代码。

1 /

static POPStaticAnimatablePropertyState _staticStates[] =
{
  /* CALayer */

  {kPOPLayerBackgroundColor,
    ^(CALayer *obj, CGFloat values[]) {
      POPCGColorGetRGBAComponents(obj.backgroundColor, values);
    },
    ^(CALayer *obj, const CGFloat values[]) {
      CGColorRef color = POPCGColorRGBACreate(values);
      [obj setBackgroundColor:color];
      CGColorRelease(color);
    },
    kPOPThresholdColor
  },

  {kPOPLayerBounds,
    ^(CALayer *obj, CGFloat values[]) {
      values_from_rect(values, [obj bounds]);
    },
    ^(CALayer *obj, const CGFloat values[]) {
      [obj setBounds:values_to_rect(values)];
    },
    kPOPThresholdPoint
  },
...
}

我得到了块部分,即:

 ^(CALayer *obj, CGFloat values[]) {
      POPCGColorGetRGBAComponents(obj.backgroundColor, values);
    }

我不能得到的是

之后的两个花括号
static POPStaticAnimatablePropertyState _staticStates[] =

应该是什么?

2 /类似但不完全相同的这段代码:

static NSUInteger staticIndexWithName(NSString *aName)
{
  NSUInteger idx = 0;

  while (idx < POP_ARRAY_COUNT(_staticStates)) {
    if ([_staticStates[idx].name isEqualToString:aName])
      return idx;
    idx++;
  }

  return NSNotFound;
}

它似乎是变量声明后的代码块。是否应该在每次使用变量时执行?

1 个答案:

答案 0 :(得分:1)

第一个是静态地声明一个POPStaticAnimatablePropertyState数组。似乎POPStaticAnimatablePropertyState本身是struct(可能是通过typedef),它有一个数字,一个块,另一个块和另一个数字。

第二个只是一个静态C函数,没什么特别的。

这段代码不是一个很好的Objective-C / Swift实践。它只是普通的普通C,可能是为了纯粹的性能而以这种方式轻松移植或编写的。