質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1186閲覧

Swift: 動的に生成されたセルにセットされた辞書型のデータを、セルのSwitchがon/offされたとき取得したい

rycshg

総合スコア11

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/11/27 12:44

編集2017/11/28 01:51

###前提・実現したいこと
Swift学び始めたばかりの初心者です。
また、プログラミング自体も初心者です。お手柔らかにお願いいたしますmm

動的に生成された TableViewCell に UISwitch を設定し、
ON/OFF されたときに下記2点を取得したいですがうまくいきません。

取得したいもの

  • セル表示名(辞書の values にあたる [String] )
  • 辞書の keys にあたる String

###発生している問題・エラーメッセージ
取得したい情報がうまくとれません。

###該当のソースコード

Swift

1/// SportsTeam.data 2class SportsTeams { 3 let teams: [String: [String]] = [ 4 "baseball" : [ 5 "読売ジャイアンツ", 6 "阪神タイガース", 7 "中日ドラゴンズ" 8 ], 9 "soccer" : [ 10 "鹿島アントラーズ", 11 "浦和レッズ", 12 "川崎フロンターレ" 13 ] 14 ] 15 16/// SportsTeamsTableViewController 17class SportsTeamsTableViewController: UITableViewController { 18 19 @IBOutlet var sportsTeamsTableView: UITableView! 20 21 @IBAction func followSwitch(_ sender: Any) { 22 let followSwitch = UISwitch() 23 followSwitch.isOn = true // フォロー中なら true / 非フォローなら false 24 } 25 26 var category: String! = "" 27 var sportsTeams = SportsTeams() 28 29 func onSwitched(_ sender: AnyObject) { 30 // フォロー時、配列に該当チームが含まれていなければ、userDefaults に追加 31 // フォローから外す場合、 userDefaults 配列からチームを削除 32 } 33 34 //tableViewセル取得 35 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 36 // 再利用可能な cell を得る 37 let cell = tableView.dequeueReusableCell(withIdentifier: "Teams", for: indexPath) 38 39 // イベント発生したセルのチームと、チームが所属するスポーツカテゴリ(ex:baseball)を特定 40 if let row = tableView.indexPathForSelectedRow?.row { 41 let team = sportsTeams.teams.values // ★ここがうまくいかない★ 42 let selectedteam = team[indexPath.row] // ★ここがうまくいかない★ 43 } 44 45 followSwitch.addTarget(self, action: #selector(self.onSwitched(_:)), for: .valuechanged) // ★ここがうまくいかない★ 46 return cell 47 } 48 49// 以下略 50}

###試したこと
何を試せばいいのかもわからず、調べてもわからず、お手上げになってしまいました。

###補足情報(言語/FW/ツール等のバージョンなど)
Xcode Version 8.3.3 (8E3004b)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

swift

1let team = sportsTeams.teams.values // ★ここがうまくいかない★

.valuesは、辞書の値を全て取得するプロパティです。
ここは.teams["baseball"]とか.teams["soccer"]ではないでしょうか?

投稿2017/11/28 00:58

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rycshg

2017/11/28 01:43

ご回答ありがとうございます! 確かにそうなのですが、 `teams["baseball"]` とすると ["読売ジャイアンツ", "阪神タイガース", "中日ドラゴンズ] が帰ってくると思われます。 選択されたセルのチームだけ(配列ではなく、たとえば "読売ジャイアンツ")を得るには どうしたらいのでしょうか・・・? ためしに下記のようにしてみましたが、`onSwitched` への受け渡しもうまくいっていないため 記述が正しいのかどうかわからずですmm ``` if let row = tableView.indexPathForSelectedRow?.row { let team = sportsTeams.teams["baseball"] let selectedTeam = team[indexPath.row] } ```
rycshg

2017/11/28 01:54

もう1つ問題があります。 "baseball" にあたる部分は前画面から遷移時に受け渡される変数 category のため "baseball" がくるか "soccer" となるかは決まっていないのです。 データの取り出し時に変数は使えないですよね、、、
fuzzball

2017/11/28 01:58 編集

※この書き込みは 2017/11/28 10:43 への返信です 何を基準にbaseball/soccerを決めるのでしょうか? それがセクションなのであれば、indexPath.section の値によってif文で分岐させればいいと思います。 スイッチについてはTableViewが解決してから考えて下さい。 同時にたくさんのことをやると混乱するだけです。 tableView(_:cellForRowAt:)の中で.indexPathForSelectedRowを使うなど、TableViewに関して理解不足と思われますので、TableViewだけのプロジェクトを作って、もう少し勉強することをお勧めします。
fuzzball

2017/11/28 05:03 編集

このTableViewには、前画面で選んだスポーツのチーム名が表示されるということでしょうか?
rycshg

2017/11/28 02:03

ご回答ありがとうございます。おっしゃる通り1つずつ理解すべきかと思いますので、精進します! >このTableViewには、前画面で選んだスポーツのチーム名が表示されるということでしょうか? はい、上記の通り全画面で選んだスポーツカテゴリを受け取り、チーム名リストが表示されます。 冒頭の下記がスポーツカテゴリ情報を受け取る変数 category の宣言です。 var category: String! = ""
fuzzball

2017/11/28 02:09

では let team = sportsTeams.teams[category] で良いのでは?
rycshg

2017/11/28 04:47

ありがとうございます。 let team = sportsTeams.teams["(category)"] でうまくいきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問