运行我的代码时,我得到的是1号打印到控制台,而不是1,2,3,4,5 ......
为什么这种情况发生的一些帮助会很棒,我很难搞清楚。
我们的想法是循环查看日历名称,直到找到“旅行”日历。
func checkCalendarExists(){
var eventCalendars = store.calendarsForEntityType(EKEntityTypeEvent) as [EKCalendar]
for i in eventCalendars {
var count = 0
var calendarCount = eventCalendars.count
if i.title != "Travel" && count != calendarCount
{
++count
println(count)
}
else if i.title == "Travel"
{
// do something
}
else
{
aMethod()
}
}
}
答案 0 :(得分:2)
您的计数变量没有递增,因为它在循环内声明并在每次迭代开始时初始化为零值。为了使代码按预期工作,您必须将var count = 0
移到for循环之外。
答案 1 :(得分:1)
您的count
变量确实会增加,但每次for loop
运行其序列时它都会重置为零。
始终建议在循环外声明和分配递增变量。
请将您的代码更改为(我在循环前初始化var count = 0
)
func checkCalendarExists(){
var eventCalendars = store.calendarsForEntityType(EKEntityTypeEvent) as [EKCalendar]
var count = 0
for i in eventCalendars {
var calendarCount = eventCalendars.count
......
......
......
else
{
aMethod()
}
}
}
答案 2 :(得分:0)
ALXGTV的答案解释了为什么会出现这种意想不到的行为。
您的代码可以进行优化 - 而不是手动处理计数器变量,我建议使用enumerate
函数,该函数在每次迭代时返回(index, value)
:
for (index, calendar) in enumerate(eventCalendars) {
...
}
这个变量:
var calendarCount = eventCalendars.count
每次迭代都会填充,并始终使用相同的值。如果它在循环之前移动会更有效,使其不可变:
let calendarCount = eventCalendars.count
for (index, calendar) in enumerate(eventCalendars) {
...
}
最后,我更倾向于使用 not found 条件的标志,在循环外处理它:
func checkCalendarExists() {
var eventCalendars = store.calendarsForEntityType(EKEntityTypeEvent) as [EKCalendar]
var found = false
let calendarCount = eventCalendars.count
for (index, calendar) in enumerate(eventCalendars) {
if calendar.title == "Travel" {
// do something
found = true
break // This stops the loop
} else {
println(index + 1)
}
}
if !found {
aMethod()
}
}