构建失败,无法引用iOS中具有可变修改类型的块内错误的声明吗?

时间:2018-01-14 06:04:46

标签: ios objective-c block

这是导致上述错误的我的代码,我看到其他人提出了类似的问题,但唯一的答案并没有完全解决我的问题,因为我怀疑这个问题应该有更好的答案。

CGPoint pointArray[lines.count];

[lines enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    NSLog(@"%f", pointArray[idx].y);
}];

1 个答案:

答案 0 :(得分:0)

Cannot refer to declaration with a variably modified type inside block及其链接的重复How to write into an array from a dispatch_apply (GCD) loop?所示,您无法访问Objective-C块内的C数组。

一种解决方案是使用CGPointNSArray个对象存储在NSValue中。

NSArray *pointArray = @[
    [NSValue valueWithCGPoint:CGPointMake(0, 0)],
    [NSValue valueWithCGPoint:CGPointMake(10, 20)]
];

pointArrayCGPoint个实例之后,您的区块变为:

[lines enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    NSLog(@"%f", pointArray[idx].CGPointValue.y);
}];