ios - 在部分中使用的对象的唯一值

标签 ios swift uitableview unique

我有一个类,我需要获取流派对象,放入数组中,获取唯一值(因为我会有很多) 并使用该数组填充 tableView 的部分。

我有以下代码:

class Movie {
var name: String!
var plot: String!
var imageUrl: String!
var genre: String!

init(name: String, plot: String, img: String, genre: String) {

    self.name = name
    self.plot = plot
    self.imageUrl = img
    self.genre = genre




  }
 }


}

import UIKit

class ViewController: UIViewController, UITableViewDataSource,   UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

}


var loadMovie = [Movie]()


let insertMovie = Movie(name: "Blow", plot: "Blow bla bla bla", img:     "", genre: "Action")
let insertMovie2 = Movie(name: "BLade", plot: "Blade bla bla bla", img: "", genre: "Action")
let insertMovie3 = Movie(name: "Inside Out", plot: "Blow bla bla bla", img: "", genre: "Kids")
let insertMovie4 = Movie(name: "Titanic", plot: "Blow bla bla bla", img: "", genre: "Drama")

loadMovie.append(insertMovie)
loadMovie.append(insertMovie2)
loadMovie.append(insertMovie3)
loadMovie.append(insertMovie4)


let unique = NSSet(array: loadMovie.map { $0.genre })

unique 返回唯一值( Action 、戏剧、 child ),但是当我尝试获取部分时:

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return unique[section].genre

}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return unique.count

}

它不起作用。

我哪里错了?

最佳答案

每次重新加载表格 View 时按流派过滤电影是非常昂贵的。

这是一个解决方案,使用标题(流派)名称数组和分别包含每个流派的 [Movie] 数组的字典。

var unique = [String]()
var loadMovie = [String:[Movie]]()

添加插入电影的方法。逻辑是:

• 如果该类型存在,则将该类型的电影添加到字典中的[Movie] 数组中。
• 如果类型不存在,则将类型添加到 unique 数组并将电影添加到字典。

func insertMovie(movie : Movie) {
  let genre = movie.genre
  if unique.contains(genre) {
    loadMovie[genre]!.append(movie)
  } else {
    unique.append(genre)
    loadMovie[genre] = [movie]
  }
}

现在插入电影

let movie = Movie(name: "Blow", plot: "Blow bla bla bla", img: "", genre: "Action")
insertMovie(movie)
let movie2 = Movie(name: "BLade", plot: "Blade bla bla bla", img: "", genre: "Action")
insertMovie(movie2)
let movie3 = Movie(name: "Inside Out", plot: "Blow bla bla bla", img: "", genre: "Kids")
insertMovie(movie3)
let movie4 = Movie(name: "Titanic", plot: "Blow bla bla bla", img: "", genre: "Drama")
insertMovie(movie4)

相关的数据源和委托(delegate)方法是

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
  return unique[section]
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
  return unique.count
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  let genre = unique[section]
  return loadMovie[genre]!.count
}

cellForRowAtIndexPath 中填充单元格

...
   let genre = unique[indexPath.section]
   let movie = loadMovie[genre]![indexPath.row]
   cell.textLabel!.text = movie.name
...

另一种方法是数组的数组

关于ios - 在部分中使用的对象的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35457371/

相关文章:

ios - 将用户发送到 iOS9 应用商店进行更新

ios - 选择 UITableViewCell 时标签背景颜色发生变化

ios - RestKit本地删除对象,仍然出现在映射中

iphone - 在 UIKit 中创建透明线的最快方法是什么?

ios - 将消息从 iOS Today Widget 发送到应用程序

ios - 如何在 swift 中的索引路径委托(delegate)的行的单元格中加载自定义表格 View 单元格

iphone - 如何将值从 TableView Controller 传递到 customCell 类

iphone - 如何测试从 iCloud 备份恢复开发中的 iOS 应用程序?

ios - 通过委托(delegate)附加的数据未显示在表上

ios - 保存和读取登录到钥匙串(keychain)不工作 IOS swift