2016-10-05 18 views
1

配列内のテーブルビューで選択した行からデータを取得しようとしています。選択した行を配列に追加しますが、これはうまくいきます。残念ながら、行を選択解除してもう一度選択すると、行が再び追加されます。私は配列から選択解除された行を削除するロジックを書く必要があります。すぐに配列内に重複を避ける3

どのように私はこれを行うことができます知っていますか?私は、行を選択したときにここ

コードである:ここ

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let selectedCell = tableView.cellForRow(at: indexPath) as? exerciseCell 
     selectedCell?.contentView.backgroundColor = UIColor(red: 84.0/255, green: 199.0/255, blue: 252.0/255, alpha: 1) 

     rowSelected+=1 

     if rowSelected >= 1 { 
      nextBtn.isEnabled = true 
      nextBtn.backgroundColor = UIColor(red: 84.0/255, green: 199.0/255, blue: 252.0/255, alpha: 1) 
     } 

     let exercisesSelected = selectedCell?.exerciseNameLbl.text 

     exerisenames.append(exercisesSelected!) 

     print(exerisenames) 

    } 

行の選択を解除するためのコードである:

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
     let selectedCell = tableView.cellForRow(at: indexPath) as? exerciseCell 
     selectedCell?.textLabel?.textColor = UIColor.darkGray 

     rowSelected-=1 

     if rowSelected == 0 { 
      nextBtn.isEnabled = false 
      nextBtn.backgroundColor = UIColor.darkGray 
      nextBtn.setTitle("Choose an exercise", for: UIControlState.disabled) 
     } 

     let exercisesDeselected = selectedCell?.exerciseNameLbl.text 


     if exerisenames.contains(exercisesDeselected!) { 
      print("exercise already in the row and has to be deleted before going further") 
     } 

     print(exerisenames) 

    } 

両方がIと呼ばれる最上位に作成された配列を参照します:exercisenames

+0

'exerisenames.removeObject(exercisesDeselected)' –

+0

[String]にメンバーがないというエラーが表示されます。removeObject –

+0

arrayではなくsetを使用してみませんか? – almas

答えて

0

ドキュメントをすばやく見ると、おそらく

のようになります。

しかし、私はまた、@ almasの注文セットの提案は良いかもしれないと思います。

+0

しかし、この場合のインデックスは何ですか?私は私のtableViewに複数の行があります。 3行目を最初に選択し、2行目を削除するとどうなりますか? –

+0

@KevinVugts indexは、要素の場所です。つまり、この場合、exercisesDeselectedです。存在する場合は削除します。しかし、これを実行すると、配列の内容がシフトされ、別の要素がその場所に格納されます。 – eshirima

+0

これは、コードが言う通りです。つまり、配列の 'index(of:)'を呼び出した結果です。これは、配列内のインデックスを返します。 Swiftのドキュメントを見てみるといいかもしれませんが、これはすべてそこにあります。 –

関連する問題