2016-04-26 5 views
1

indexPath.rowに基づいてdidSelectRowAtIndexPathのアクションを変更する最良の方法は何ですか?それはdidSelectRowAtIndexPathメソッド内ではありませんように:didSelectRowAtIndexpath ifステートメントを入れ子にしました

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 
} 

だから、私はdoActionOnSelect(NSIndexPath indexPath)にこのコードを分離することができます。たとえば

、5行はこのような何かを持っている私をリード。

しかし、私はここにたくさんの繰り返しコードを見ることができます。それが私が最小化しようとしていることです。

この質問は、MVC、責任、および基本的に私のコードを構造化する方法についてです。

+1

「すべてこれを行う」が同じことをするのかどうかは不明です。その場合、コードをたくさん短縮することができます –

+0

投稿する "これを行う"の詳細 – luiyezheng

+0

申し訳ありませんが、実際には異なっています。 //これを行う、//これを行う2 –

答えて

1

これはすべて高水準で一般化されていますが、うまくいけば助かります。

リファクタの1つのアプローチは、データ/状態(その大きなswitch文によって表される可能性が高い)を他のオブジェクト、たとえば「モデル」に入れ、section/row入力でそのモデルを調べることです予想される出力を返します。おそらく、おそらく何らかのタイプのセルです。または、作成する必要のあるセル専用の別のモデルオブジェクトです。

もう一つのリファクタはenumを使ってあなたの "モード"を定義し、それをあなたのswitch文とテーブルビューのセクションと行をバックアップするデータに使うことです。スウィフトでenumが網羅的なので、混乱を避けることができますdefault:ケース。

もう1つのアプローチは、モデルオブジェクトを介して各セルの状態を表すことができます。データをモデルオブジェクトに渡し、モデルオブジェクトを作成するときにモデルオブジェクトをセルに渡します。

とにかく、皮膚への方法の多くは、この猫があります:

https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=Refactor+table+view

0

あなたのif/else文を取り除くための簡単な方法は、スイッチケースを実装する関数のofflineDidSelectRowAtIndexPathを作成することです。

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

注意を持っています:ここで

はどのようだ私の答えよりもはるかに簡単/簡単に/より良い方法があるかもしれません。 (また、breakステートメントを忘れないでください)。

関連する問題