Использование двух массивов в UITableview Swift - PullRequest
0 голосов
/ 28 октября 2018

У меня есть две метки в одной ячейке и два массива в одном табличном представлении, я хочу связать каждый массив с меткой

list [] с la_view и list_2 [] с la_view2, также la_view и la_view2 в одномячейка в табличном представлении

При запуске программа показывает ошибку, как показано.

var list = [String]()
var list_2 = [String]()

func tableView (_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

      return list.count + list_2.count

}

func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell_1") as! TableView_Cell
        print("\(list.count)")
        cell.la_view.text = list[indexPath.row]
        cell.la_view2.text = list_2[indexPath.row] // eroor here
        cell.backgroundColor = UIColor(named: "Defeult")
        return cell
}

// This append in arrays
func append(add:Int) {
    list.append("\(add)")
    list_2.append("\(add)")
    let indexPath = IndexPath(row: list.count - 1, section: 0)
    let indexPath2 = IndexPath(row: list_2.count - 1, section: 0)
    table_View.beginUpdates()
    table_View.insertRows(at: [indexPath], with: .automatic)
    table_View.insertRows(at: [indexPath2], with: .automatic)
    table_View.endUpdates()
}

1 Ответ

0 голосов
/ 28 октября 2018

Не делай этого.Не используйте несколько массивов в качестве источника данных

return list.count + list_2.count

вызывает ошибку, потому что на самом деле у вас есть только list.count количество элементов, где list.count должно быть равно list_2.count.При сложении возникает исключение вне допустимого диапазона в строке list.count + 1

Использование пользовательской структуры

struct Item {
    let foo : String
    let bar : String
}

Затем сопоставьте два массива

var items = [Item]()

items = zip(list, list_2).map{ Item(foo:$0.0, bar:$0.1) }

In numberOfRowsInSection возврат items.count

В cellForRowAt получить значение из Item instance

let item = items[indexPath.row]
cell.la_view.text = item.foo
cell.la_view2.text = item.bar

Чтобы добавить элемент, используйте

func append(add:Int) {
    let lastIndex = items.count
    items.append( Item(foo:"\(add)", bar:"\(add)") )
    let indexPath = IndexPath(row: lastIndex, section: 0)
    table_View.insertRows(at: [indexPath], with: .automatic)
}

И, пожалуйста,в соответствии с соглашением об именах используйте lowerCamelCased вместо snake_cased имен переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...