【发布时间】:2021-01-27 09:17:54
【问题描述】:
我有一个结构数据,我正在尝试在指定索引处填充表格视图,但如果尝试将 indexPath.row 属性用于数据和单元格标签,我每次都会遇到 index out of range 错误..
我的结构:
struct TradingPairs: Codable {
var id: Int
var name: String
var baseAsset: String
var quoteAsset: String
}
struct PairByTicker: Codable {
var price: Float
var ask: Float
var askVolume: Float
var bid: Float
var bidVolume: Float
var volume: Float
var time: String
enum CodingKeys: String, CodingKey {
case price = "price"
case ask = "ask"
case askVolume = "askVolume"
case bid = "bid"
case bidVolume = "bidVolume"
case volume = "volume"
case time = "time"
}
}
和 ViewController 中的结构实例:
var tradingPair = [TradingPairs]()
var pairByTicker = [PairByTicker]()
在 My TableView Cell cell for row at dequeue 方法中:
cell.name.text = self.tradingPair[indexPath.row].name
cell.price.text = String(describing: self.pairByTicker[indexPath.row].price)
cell.volume.text = String(describing: self.pairByTicker[indexPath.row].volume)
return cell
--TableView 数据源:
extension ViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.tradingPair.count + [self.pairByTicker].count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TradingPairCell") as! TradingPairCell
// for data in self.pairByTicker {
// let pairs = data
// cell.configure(data: pairs)
// }
// for data in self.tradingPair {
// cell.configure(data: data)
// }
cell.name.text = self.tradingPair[indexPath.row].name
cell.price.text = String(describing: self.pairByTicker[indexPath.row].price)
cell.volume.text = String(describing: self.pairByTicker[indexPath.row].volume)
return cell
}
}
extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 44
}
}
不知道为什么我的索引超出范围错误..(
【问题讨论】:
-
贴出tableview委托和数据源方法的代码
-
您的
cellForRowAt方法访问self.tradingPair[indexPath.row]但numberOfRowsInSection方法返回self.tradingPair.count + [self.pairByTicker].count- 你能发现问题吗? -
@MartinR,对你的反馈有点困惑,你能详细说明一下吗?
-
将此添加到您的
cellForRowAt方法中,您应该会看到问题:print("Access element with index", indexPath.row, "number of elements in array is", self.tradingPair.count) -
您的表应该有一个数据源,而不是两个(tradingPair 和 pairByTicket),尝试将它们组合成一个数组。