Objective-C:变量声明后的花括号
Objective-C: Curly braces after variable declaration
我正在努力更好地理解好的 Objective-C/Swift 实践,我目前正在阅读这篇文章:https://github.com/facebook/pop/blob/master/pop/POPAnimatableProperty.mm,来自 [=32] 中的 Awesome-iOS 回购=].这两段代码没看懂
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;
}
好像是变量声明后的代码块。是否应该在每次使用变量时执行?
第一个是静态声明 POPStaticAnimatablePropertyState
的数组。 POPStaticAnimatablePropertyState
似乎是一个 struct
本身(可能通过 typedef
),它有一个数字、一个块、另一个块和另一个数字。
第二个只是一个静态 C 函数,没什么特别的。
此代码不是一个好的 Objective-C/Swift 做法。它只是普通的纯 C,可能被编写为易于移植或以这种方式编写以实现纯粹的性能。
我正在努力更好地理解好的 Objective-C/Swift 实践,我目前正在阅读这篇文章:https://github.com/facebook/pop/blob/master/pop/POPAnimatableProperty.mm,来自 [=32] 中的 Awesome-iOS 回购=].这两段代码没看懂
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;
}
好像是变量声明后的代码块。是否应该在每次使用变量时执行?
第一个是静态声明 POPStaticAnimatablePropertyState
的数组。 POPStaticAnimatablePropertyState
似乎是一个 struct
本身(可能通过 typedef
),它有一个数字、一个块、另一个块和另一个数字。
第二个只是一个静态 C 函数,没什么特别的。
此代码不是一个好的 Objective-C/Swift 做法。它只是普通的纯 C,可能被编写为易于移植或以这种方式编写以实现纯粹的性能。