使用for-in循环枚举

时间:2015-08-13 18:24:36

标签: ios swift

我有一个抛出错误的循环“Int不能转换为Range< Int>”:

var summaryValues:[Int]=[Int]();
for (dayIndex,valuesPerDay) in enumerate(allValuesPerDay){
    if (valuesPerDay>0){
        while summaryValues[dayIndex]==nil{ // ERROR
            summaryValues.append(0);
        }
        summaryValues[dayIndex]++
    }
}

第四行应该只是检查位置summaryValues中的dayIndex是否有值,但我对Swift语法有点不清楚。有想法该怎么解决这个吗?谢谢你的阅读。

编辑:

我实施的解决方法是替换错误行 while cohortRetension.count<dayIndex+1但我还是希望更好地理解为什么summaryValues[dayIndex]不正确。

2 个答案:

答案 0 :(得分:3)

  

而summaryValues [dayIndex] == nil {// ERROR

summaryValues是一个数组,array [i]不会返回nil。它将返回元素,如果索引超出范围,它将崩溃。首先,编译器可能与比较Intnil相混淆。其次,尝试访问summaryValues[dayIndex]会崩溃,因为当你检查它时,数组是空的并且索引不存在。

答案 1 :(得分:2)

如果您事先知道大小,则反复追加数组是不合适的。将您的summaryValues初始化为:

var summaryValues = [Int](count: allValuesPerDay.count, repeatedValue: 0)

然后只需使用以下内容迭代allValuesPerDay

for dayIndex in 0..<allValuesPerDay.count { 
   if allValuesPerDay[dayIndex] > 0 {
      summaryValues[dayIndex]++
   }
}
相关问题