我有一个抛出错误的循环“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]
不正确。
答案 0 :(得分:3)
而summaryValues [dayIndex] == nil {// ERROR
summaryValues是一个数组,array [i]不会返回nil。它将返回元素,如果索引超出范围,它将崩溃。首先,编译器可能与比较Int
和nil
相混淆。其次,尝试访问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]++
}
}