Ios didSelectRowAtIndexpath嵌套if语句

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

基于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
  }
 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