ios - Objective C 在循环外分配数组变量

标签 ios objective-c arrays

在下面的代码中,我想在循环结束时计算强度的净总和,但是 Objective-C 在 NSlog 中调用了 zsum 未声明的变量。如何在循环结束时计算 Sum 并将其传递到循环外。

NSMutableArray *arr = [[NSMutableArray alloc] init];
for (int x = 1; x < 20; x++) {
    double zsum = 0;
    NSMutableArray *row = [NSMutableArray new];
    for (int y = 1; y < 20; y++) {  
        uchar intensity= curFrame.at<uchar>(cvPoint(y, x));
        double zebra = double (intensity)/255;
        zsum+= zebra;
        [row addObject:[NSNumber numberWithChar:intensity]];
    }

   // NSLog(@"%d", x);

    //NSLog(@"%f",d);
    [arr addObject:[NSNumber numberWithInt:zsum]];
 //   [matrix addObject:row];
}
NSLog(@“%f",zsum);

最佳答案

所以将 zsum 的声明移到 for 循环之外,在 arr 声明之后和 for 循环之前:

NSMutableArray *arr = [[NSMutableArray alloc] init];
double zsum = 0;
for (int x = 1; x < 20; x++) {
   //The rest of your for loop code goes here.
}

在 Objective-C 中,任何时间代码都包含在定义新范围的大括号({})中。在这些大括号内声明的任何变量只存在于这些大括号内。当您退出大括号时,变量“超出范围”并且不再存在。在外部作用域中定义的变量对嵌套更深层次的作用域可见,但对外部作用域不可见。

{
  int a;
  {
    //a is visible
    int b;
    //a and b are both visible
  }
  //b is no longer visible
  {
    //int c
    //a and c are visible
    {
      int d;
      //a, c, and d are visible
    }
    //a and c are visible, d is no longer visible.
  }
  //only a is visible
}
//None of the vars are visible

上面的代码很做作,但有效。您可能不会使用仅定义范围级别的大括号​​,但您可以。它们更有可能包含 block 、if 语句的主体、函数等。

关于ios - Objective C 在循环外分配数组变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317959/

相关文章:

ios - 使用 AFHTTPSessionManager 和身份验证下载文件

objective-c - 获取 nil 对象的类类型?

iphone - 音频文件无法在 iPhone 5 中播放

javascript - 如何使用纯 JavaScript 访问最内层的双重嵌套数组/对象?

ios - WKWebView 显示灰色背景并且 pdf 内容在 viewcontroller 开关上变得不可见

ios - UIKit:如何循环UILabel文本的数字增量

ios - CollectionView多单元格选择

arrays - Swift:无法使用 removeAtIndex 从数组中删除项目

IOS:WKWebView中的文本选择(WKSelectionGranularityCharacter)

ios - 使用 NSUserDefault 保存用户名密码,如何以及安全程度如何?