Ios 我的For循环中的计数没有增加
当运行我的代码时,我会在控制台上打印一些1,而不是1,2,3,4,5 如果能帮我解释一下为什么会发生这样的事情,那就太好了,我很难弄明白 我们的想法是循环浏览日历名称,直到找到“旅行”日历Ios 我的For循环中的计数没有增加,ios,macos,swift,eventkit,Ios,Macos,Swift,Eventkit,当运行我的代码时,我会在控制台上打印一些1,而不是1,2,3,4,5 如果能帮我解释一下为什么会发生这样的事情,那就太好了,我很难弄明白 我们的想法是循环浏览日历名称,直到找到“旅行”日历 func checkCalendarExists(){ var eventCalendars = store.calendarsForEntityType(EKEntityTypeEvent) as [EKCalendar] for i in eventCalendars {
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()
}
}
}
您的count变量没有递增,因为它在循环中声明,并在每次迭代开始时初始化为零。要使代码按预期工作,您必须将
var count=0
移到For循环外部。您的count变量不会增加,因为它在循环内部声明,并在每次迭代开始时初始化为零。要使代码按预期工作,您必须将var count=0
移到For循环外部。您的count变量不会增加,因为它在循环内部声明,并在每次迭代开始时初始化为零。要使代码按预期工作,您必须将var count=0
移到For循环外部。您的count变量不会增加,因为它在循环内部声明,并在每次迭代开始时初始化为零。要使代码按预期工作,您必须将var count=0
移到For循环之外。您的count
变量确实会增加,但每次For循环运行其序列时,它都会重置为零
总是建议在循环外声明和分配递增变量
请将代码更改为(我正在循环前初始化var count=0
)
您的count
变量确实会增加,但每次for循环运行其序列时,它都会重置为零
总是建议在循环外声明和分配递增变量
请将代码更改为(我正在循环前初始化var count=0
)
您的count
变量确实会增加,但每次for循环运行其序列时,它都会重置为零
总是建议在循环外声明和分配递增变量
请将代码更改为(我正在循环前初始化var count=0
)
您的count
变量确实会增加,但每次for循环运行其序列时,它都会重置为零
总是建议在循环外声明和分配递增变量
请将代码更改为(我正在循环前初始化var count=0
)
ALXGTV的回答解释了为什么你会有这种意想不到的行为
您的代码可以进行优化-我建议使用enumerate
函数,而不是手动处理计数器变量,该函数在每次迭代时返回(索引,值)
:
for (index, calendar) in enumerate(eventCalendars) {
...
}
此外,该变量:
var calendarCount = eventCalendars.count
在每次迭代时填充,始终使用相同的值。如果将其移动到循环之前,使其不可变,则效率会更高:
let calendarCount = eventCalendars.count
for (index, calendar) in enumerate(eventCalendars) {
...
}
最后,我更喜欢使用未找到条件的标志,在循环之外处理它:
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()
}
}
ALXGTV的回答解释了为什么你会有这种意想不到的行为
您的代码可以进行优化-我建议使用enumerate
函数,而不是手动处理计数器变量,该函数在每次迭代时返回(索引,值)
:
for (index, calendar) in enumerate(eventCalendars) {
...
}
此外,该变量:
var calendarCount = eventCalendars.count
在每次迭代时填充,始终使用相同的值。如果将其移动到循环之前,使其不可变,则效率会更高:
let calendarCount = eventCalendars.count
for (index, calendar) in enumerate(eventCalendars) {
...
}
最后,我更喜欢使用未找到条件的标志,在循环之外处理它:
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()
}
}
ALXGTV的回答解释了为什么你会有这种意想不到的行为
您的代码可以进行优化-我建议使用enumerate
函数,而不是手动处理计数器变量,该函数在每次迭代时返回(索引,值)
:
for (index, calendar) in enumerate(eventCalendars) {
...
}
此外,该变量:
var calendarCount = eventCalendars.count
在每次迭代时填充,始终使用相同的值。如果将其移动到循环之前,使其不可变,则效率会更高:
let calendarCount = eventCalendars.count
for (index, calendar) in enumerate(eventCalendars) {
...
}
最后,我更喜欢使用未找到条件的标志,在循环之外处理它:
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()
}
}
ALXGTV的回答解释了为什么你会有这种意想不到的行为
您的代码可以进行优化-我建议使用enumerate
函数,而不是手动处理计数器变量,该函数在每次迭代时返回(索引,值)
:
for (index, calendar) in enumerate(eventCalendars) {
...
}
此外,该变量:
var calendarCount = eventCalendars.count
在每次迭代时填充,始终使用相同的值。如果将其移动到循环之前,使其不可变,则效率会更高:
let calendarCount = eventCalendars.count
for (index, calendar) in enumerate(eventCalendars) {
...
}
最后,我更喜欢使用未找到条件的标志,在循环之外处理它:
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()
}
}
谢谢你,这么明显的尴尬表情。对不起,我不能投赞成票,我没有足够的票rep@Yelims01你不必感到尴尬或抱歉。下次试着通过你的代码和谷歌步骤进行推理。我希望你能帮助其他新手。谢谢你,这么明显的尴尬表情。对不起,我不能投赞成票,我没有足够的票rep@Yelims01你不必感到尴尬或抱歉。下次试着通过你的代码和谷歌步骤进行推理。我希望你能帮助其他新手。谢谢你,这么明显的尴尬表情。对不起,我不能投赞成票,我没有足够的票rep@Yelims01你不必感到尴尬或抱歉。下次试着通过你的代码和谷歌步骤进行推理。我希望你能帮助其他新手。谢谢你,这么明显的尴尬表情。对不起,我不能投赞成票,我没有足够的票rep@Yelims01你不必感到尴尬或抱歉。下次试着通过你的代码和谷歌步骤进行推理。我希望你能帮助其他新手。