仅当条件匹配时递增for循环计数的实现求助
解决手动控制循环索引的问题
嘿,我懂你想实现的需求啦——只有当条件匹配的时候,才让循环的索引递增,不然就停在当前索引继续处理对吧?
首先得说,Swift里的for i in 0..<countEvent这种快速遍历循环是自动帮你递增索引的,没法直接干预它的计数逻辑。所以要实现你要的效果,咱们得换成while循环,手动控制索引的变化。
给你改个示例代码,顺便优化一下你代码里的强制解包问题(避免崩溃风险):
// 先安全解包arrEvent,避免强制解包的崩溃风险 if let arrEvent = arrEvent { var i = 0 let countEvent = arrEvent.count // 用while循环手动控制索引 while i < countEvent { // 安全获取start_date和end_date的字符串值 guard let strStartDate = arrEvent[i]["start_date"].string, let dateStart = dateFormatter.date(from: strStartDate), let strEndDate = arrEvent[i]["end_date"].string, let dateEnd = dateFormatter.date(from: strEndDate) else { // 如果日期解析失败,可以选择递增索引或者停在这里,根据你的需求调整 i += 1 continue } // 这里写你的条件判断逻辑,比如判断strCurrentDate和日期的关系 if /* 你的条件匹配逻辑,比如strCurrentDate在dateStart和dateEnd之间 */ { // 条件满足时,才递增索引 i += 1 } // 如果条件不满足,i不会递增,循环会继续处理当前索引的内容 } }
关键点说明:
- 用
while循环代替for-in,这样咱们能完全掌控索引i的变化 - 用
guard let做安全解包,替代原代码里的!强制解包,避免因为可选值为nil导致崩溃 - 只有当你的条件匹配时,才执行
i += 1,否则循环会停在当前i值,下一次还是处理同一个元素
这样就能实现你要的「仅条件匹配时递增计数,否则从原索引重新执行」的效果啦!
内容的提问来源于stack exchange,提问作者iOS_developer
相关产品推荐
相关产品推荐

