2016-06-08 156 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

是的,這的確是一個結構,我是由結構本身之前的第一大括號揭去,但我猜他用它來創建陣列。 –