Swift开发中if语句判断为true时如何终止执行后续同方法内代码
问题原因
你当前代码中所有的条件判断都使用了独立的if语句,彼此之间没有关联,只要条件匹配就会执行对应逻辑。当第一个if判断匹配成功修改图片后,后续的if会基于修改后的图片值再次判断,就会出现依次执行所有判断、最终回到蓝色的问题。
解决方案1:使用
if-else if链式判断 这是对你现有代码改动最小的方案,只要前面某一个条件判断为true,后续的所有判断逻辑都会直接跳过,完全符合你的需求:
@IBAction func didTapLike(){ if profilImage.image == UIImage(named: "blue"){ profilImage.image = UIImage(named: "yellow") } else if profilImage.image == UIImage(named: "yellow"){ profilImage.image = UIImage(named: "green") } else if profilImage.image == UIImage(named: "green"){ profilImage.image = UIImage(named: "purple") } else if profilImage.image == UIImage(named: "purple"){ profilImage.image = UIImage(named: "red") } else if profilImage.image == UIImage(named: "red"){ profilImage.image = UIImage(named: "blue") } }
解决方案2:更易维护的数组循环方案
如果后续你需要新增、调整颜色顺序,不用写大量判断逻辑,直接修改颜色数组即可,扩展性更强:
// 颜色顺序数组定义在类的全局位置即可,无需每次点击都重复创建 private let colorOrder = ["blue", "yellow", "green", "purple", "red"] @IBAction func didTapLike(){ // 获取当前图片对应的颜色下标 guard let currentImageName = profilImage.image?.accessibilityIdentifier, let currentIndex = colorOrder.firstIndex(of: currentImageName) else { // 兜底逻辑:匹配失败时默认设置为第一个颜色 profilImage.image = UIImage(named: colorOrder[0]) return } // 计算下一个颜色下标,到最后一位自动循环回到第一位 let nextIndex = (currentIndex + 1) % colorOrder.count profilImage.image = UIImage(named: colorOrder[nextIndex]) }
小优化建议:直接判断UIImage是否相等存在一定性能开销,也可能因为图片资源差异出现判断不准确的问题。你可以单独定义一个变量存储当前选中的颜色值,后续直接判断变量值即可,逻辑更稳定高效。
内容的提问来源于stack exchange,提问作者user14030013
相关产品推荐
相关产品推荐

