Ios didSelectRowAtIndexpath嵌套if语句
基于indexPath.row更改DidSelectRowatineXpath操作的最佳方法是什么 例如,5行导致我有如下内容:Ios didSelectRowAtIndexpath嵌套if语句,ios,swift,Ios,Swift,基于indexPath.row更改DidSelectRowatineXpath操作的最佳方法是什么 例如,5行导致我有如下内容: switch indexPath.row { case 0: if offlineMode { // do this } else { // do something else } case 1: if offlineMode { // do this } else { // do something else
switch indexPath.row {
case 0:
if offlineMode {
// do this
} else {
// do something else
}
case 1:
if offlineMode {
// do this
} else {
// do something else
}
case 2:
if offlineMode {
// do this
} else {
// do something else
}
case 3:
if offlineMode {
// do this
} else {
// do something else
}
case 4:
if offlineMode {
// do this
} else {
// do something else
}
default:
// default behaviour
}
因此,我可以将这段代码分为doActionSelect(indexPath:NSIndexPath),这样它就不在didSelectRowatineXpath方法中了
但是,我可以在这里看到很多重复的代码。这就是我想尽量减少的
这个问题更多地围绕着MVC、责任以及构建代码的基本方法。这都是高层次的、一般化的,但希望有帮助 重构代码的一种方法是将数据/状态(可能由大开关语句表示)放入另一个对象中,比如说“模型”,并使用节/行输入查询该模型,然后返回预期的输出:可能是某种类型的单元格。或者可能是另一个模型对象,专门用于需要创建的单元 另一个重构是使用
enum
来定义“模式”,并在switch语句中以及对支持表视图节和行的数据使用该模式。由于enum
s在Swift中是详尽无遗的,因此可以消除令人困惑的default:
案例
另一种方法是通过模型对象来表示每个单元的状态。将数据提供给模型对象,然后在创建模型对象时将其传递给单元
无论如何,有很多方法可以剥这只猫的皮:
摆脱if/else语句的一个简单方法是创建一个离线函数didselectrowatindexpath,该函数实现了switch case 以下是方法:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
guard offlineMode != true else {
offlineDidSelectRowAtIndexPath(tableview, didSelectRowAtIndexPath: indexPath)
return
}
switch indexPath.row {
case 0:
// do something else 1
case 1:
// do something else 2
case 2:
// do something else 3
case 3:
// do something else 4
case 4:
// do something else 5
default:
// default online and/or offline behaviour
}
你会有一个函数
func offlineDidSelectRowAtIndexPath(tableView: UITableView, indexPath: NSIndexPath) {
switch indexPath.row {
case 0:
// do this 1
case 1:
// do this 2
case 2:
// do this 3
case 3:
// do this 4
case 4:
// do this 5
default:
// default behaviour
}
}
注意:可能有比我的答案更简单/更容易/更好的方法。(另外,不要忘记中断语句)。不清楚所有“执行此操作”是否都执行相同的操作。如果是这样的话,你可以把你的代码缩短很多,把“做这件事”的细节贴出来。请注意,它们实际上是不同的做这个1,//做这个2