Swift:点击TableView单元格后变量无法累加,始终输出10
问题分析与解决方案
嘿,我一眼就瞅出你代码里的问题啦!
核心问题:局部变量没法持久化累加
你把tableView2Taps定义在了didSelectRowAt方法的else代码块内部:
else{ var tableView2Taps = 0 // ... 其他逻辑代码 tableView2Taps += 10 // ... print(tableView2Taps) }
这意味着每次用户点击单元格时,这个变量都会被重新创建并初始化为0,之后再加10,所以每次打印结果必然是10,完全做不到累加效果。
修复方案:把变量改成类的实例属性
要让变量的值在多次点击之间保存下来,你需要把tableView2Taps定义为当前ViewController的实例属性,放在方法外面:
// 在类的顶部(方法外面)定义这个属性 var tableView2Taps = 0 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) if (tableView == secondTable){ if isTimerRunning == true { // 这里可以留空或者添加提示用户的逻辑 }else{ selectedindex = indexPath.row if (selectedindex == 0){ seconds = 3600 secondsreset = 3600 tableView2Taps += 10 } if (selectedindex == 1){ seconds = 2700 secondsreset = 2700 tableView2Taps += 10 } if (selectedindex == 2){ seconds = 1800 secondsreset = 1800 tableView2Taps += 10 } if (selectedindex == 3){ seconds = 1200 secondsreset = 1200 tableView2Taps += 10 } if (selectedindex == 4){ seconds = 600 secondsreset = 600 tableView2Taps += 10 } print(tableView2Taps) } // ... 剩下的单元格勾选逻辑不变 } }
额外优化小建议
你可以把多个重复的if判断改成switch语句,让代码更简洁清爽:
switch selectedindex { case 0: seconds = 3600 secondsreset = 3600 case 1: seconds = 2700 secondsreset = 2700 case 2: seconds = 1800 secondsreset = 1800 case 3: seconds = 1200 secondsreset = 1200 case 4: seconds = 600 secondsreset = 600 default: break } tableView2Taps += 10
这样修改之后,每次点击符合条件的单元格时,tableView2Taps就会持续累加,打印出来的数值也会正常增长啦!
内容的提问来源于stack exchange,提问作者Johnny Microseed
相关产品推荐
相关产品推荐

