Как вы используете Set with Table View? - PullRequest
0 голосов
/ 05 августа 2020

Я хочу перебрать Set и отобразить их в таблице, но получаю сообщение об ошибке:

Неустранимая ошибка: неверный индекс

Ниже мой код:

@NSManaged public var progress: Set<Progress>

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    cell.textLabel?.text = progress[progress.index(progress.startIndex, offsetBy: indexPath.row)].comment
    return cell
}

Ответы [ 2 ]

3 голосов
/ 05 августа 2020

A Set неупорядочено. Sort набор - например, date - чтобы получить массив в указанном c порядке и использовать его как массив источников данных

var progresses = [Progress]() 

...   

progresses = progress.sorted{$0.date < $1.date}
0 голосов
/ 05 августа 2020

Просто используйте indexPath.row в качестве индекса в Array после преобразования Set<Progress> в Array<Progress> с использованием инициализатора Array(Set).

cell.textLabel?.text = Array(progress)[indexPath.row].comment

Лучший подход: использование инициализатора Array(Set) in cellForRowAt каждый раз менее эффективен, также порядок элементов не может быть гарантирован. Лучше сделать это один раз сразу после инициализации progress: Set<Progress>.

var progressArray: [Progress] // set this right after `progress` is set

Затем в cellForRowAt:

cell.textLabel?.text = progressArray[indexPath.row].comment
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...