Я только недавно установил последнюю версию Swift 4 и пытаюсь создать простую таблицу. Я помню, что когда вы используете данные из массива и хотите заполнить tableView данными из массива, вы переходите на cellForRowAt indexPath
и делаете что-то вроде
var arrData = ["1", "2","3","4","5","6","7","8"]
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
cell.textLbl.text = arrData[indexPath.row]
return cell
}
и табличное представление будет в основном отображать все данные из arrData.
Теперь я вижу, что в табличном представлении отображается только первый объект в массиве. В этом случае он будет просто отображать 1 восемь раз. Я пытался найти что-то, чтобы решить эту проблему, но не было ничего, что могло бы решить эту проблему Затем я увидел учебник, в котором вместо него используются словари, поэтому я решил просто попробовать его.
Это простой класс, который я создал для использования в словаре:
import Foundation
import UIKit
class ArrayTest {
var id: Int
var name: String
var phone: String
init(id: Int, name: String, phone: String) {
self.id = id
self.name = name
self.phone = phone
}
}
Это мой viewController, у которого есть tableView:
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var tableArr: [ArrayTest] = [ArrayTest]()
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
populateArr()
}
func populateArr() {
let arrayTest1 = ArrayTest(id: 1, name: "Test1", phone: "111-111-1111")
let arrayTest2 = ArrayTest(id: 2, name: "test2", phone: "222-222-2222")
let arrayTest3 = ArrayTest(id: 3, name: "test3", phone: "333-333-3333")
self.tableArr.append(arrayTest1)
self.tableArr.append(arrayTest2)
self.tableArr.append(arrayTest3)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func numberOfSections(in tableView: UITableView) -> Int {
return tableArr.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
cell.textLbl.text = self.tableArr[indexPath.row].name
return cell
}
}
А это класс для tableViewCell:
import UIKit
class TableViewCell: UITableViewCell {
@IBOutlet weak var textLbl: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Из прошлого опыта я помню, что это сработало бы, и все данные в словаре были бы помещены в tableView. Но теперь каждый раз, когда я делаю это, все, что я получаю, это повторение первого объекта, и в этом случае это будет «Test1».
Мне просто интересно, где я продолжаю идти не так, или что-то упускаю, или есть что-то новое для использования в Swift 4, о котором я не знаю.