2016-06-08 96 views
1

后,我试图更好地了解良好的Objective-C /斯威夫特的做法,和我目前正在读这一点:https://github.com/facebook/pop/blob/master/pop/POPAnimatableProperty.mm,在GitHub上的真棒-IOS回购。我不明白这两位代码。的Objective-C:大括号变量声明

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

第一种是声明的POPStaticAnimatablePropertyState数组静态。看起来POPStaticAnimatablePropertyStatestruct本身(可能通过typedef),它有一个数字,一个数据块,另一个数据块和另一个数字。

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

此代码是不是一个好的目标-C /斯威夫特实践。它只是普通的普通C语言,可能被写成可以轻松移植或以这种方式写入纯粹的性能。

+0

是的,这的确是一个结构,我是由结构本身之前的第一大括号揭去,但我猜他用它来创建阵列。 –