gpt4 book ai didi

ios - 从单独的类输出二维数组中的元素

转载 作者:行者123 更新时间:2023-11-30 10:58:33 24 4
gpt4 key购买 nike

我需要将一个类的二维数组中的第二个元素输出到 TableViewController。我尝试了一些方法,例如 data.reduce into:,但没有成功。 FirstViewController 应该填充三种类型“ Action 、悬疑和浪漫”,然后可以单击以显示属于该类型的所有电影。

头等舱:

     import Foundation

protocol MovieModelDelegate: class {
func didRecieveDataUpdate(data: [[String]])
}

class MovieModel {

weak var delegate: MovieModelDelegate?

var genreArray: [String] = []
let data: [[String]] = [
["Avatar", "Action"],
["Limitless", "Suspense"],
["Die Hard", "Action"],
["The Avengers", "Action"],
["The Notebook", "Romance"],
["Lakehouse", "Romance"],
["Gone Girl", "Suspense"],
["Deadpool", "Action"],
["Passengers", "Suspense"],
["Inception", "Suspense"],
["Mission Impossible", "Action"]
]

func requestData() {
let movie: [[String]] = data
delegate?.didRecieveDataUpdate(data: movie)
}
}


**TableView Class:**


class FirstTableView: UITableViewController, MovieModelDelegate {

var model = MovieModel()
var selectedGenre: String = ""

override func viewDidLoad() {
super.viewDidLoad()
model.delegate = self
model.requestData()
}

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return model.genreArray.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "GenreCells", for: indexPath) as! TableViewCell
cell.genreLabel?.text = model.genreArray[indexPath.item]
return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedGenre = model.data[indexPath.row]
selectedGenre = ""
for indexPath in model.data{
if indexPath[1] == selectedGenre{
selectedGenre.append(indexPath[0])
}
}
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "pushToMovies") {
if let VC = segue.destination as? FilteredSelection {
VC.selectedMovies = [selectedGenre]
}
}
}

func didRecieveDataUpdate(data: [[String]]) {
}

deinit{
}
}

最佳答案

您需要将数据更改为可以由 TableView 索引的形式。我将使用以下代码将其更改为字典。

let genreDictionary = data.reduce(into: [:]) { d, element in
d[element[1], default: []].append(element[0])
}

这将创建以下字典

["Suspense": ["Limitless", "Gone Girl", "Passengers", "Inception"], 
"Romance": ["The Notebook", "Lakehouse"],
"Action": ["Avatar", "Die Hard", "The Avengers", "Deadpool", "Mission Impossible"]]

然后在您的表格 View 函数中使用字典,如下所示

   override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return model.genreDictionary.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "GenreCells", for: indexPath) as! TableViewCell
let d = model.genreDictionary
cell.genreLabel?.text = d[d.keys.index(d.startIndex, offsetBy: indexPath.row)].key
return cell
}

当您需要某个表格 View 行的电影数组时,您可以使用以下内容

let d = model.genreDictionary
let arrayOfFilms = d[d.keys.index(d.startIndex, offsetBy: indexPath.row)].value

关于ios - 从单独的类输出二维数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53663563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com