UITableView 不显示类数组数据

问题描述 投票:0回答:1

我正在尝试创建一个应用程序来获取用户的输入并填充一个类,然后将该数据存储在我想要检索并填充 UITableView 的数组中。

我的问题是,我一生都无法弄清楚到底出了什么问题,因为我自己学会了如何编码,而且我确信这会很简单,但是,我就是找不到出来了。

我没有收到任何错误,并搜索了几天,看看其他人是否使用一系列类遇到了同样的问题,但到目前为止还没有成功。

我尝试使用预定义的字符串手动填充类,但这没有任何区别。我尝试打印,但发现没有打印任何内容,因此为什么我的 UITableView 上没有显示任何内容。 我已经定义了数据源和委托,但没有用。

这是我的类和数组:

class UserTrips {
        init(type: String = "Tourism", roundtrip: String = "True", departure: String = "March 10, 2024", arrival: String = "March 23, 2024", from: String = "YYZ", to: String = "OPO", vehicle: String = "Air") {
        }
    }
    
    let tripVariable = UserTrips()
    var tripsArray: [UserTrips] = [
        .init(type: "Tourism", roundtrip: "True", departure: "March 5, 2024", arrival: "March 10, 2024", from: "YYZ", to: "OPO", vehicle: "Air"),
        .init(type: "Tourism", roundtrip: "False", departure: "March 10, 2024", arrival: "March 23, 2024", from: "Toronto", to: "New York", vehicle: "Land")
        ]

这是我的viewDidLoad:

override func viewDidLoad() {
        super.viewDidLoad()
        
        self.tripsCellView.register(TripsTVC.nib(), forCellReuseIdentifier: TripsTVC.identifier)
        self.tripsCellView.delegate = self
        self.tripsCellView.dataSource = self
}

这是tableView代码:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tripsArray.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        let data = tripsArray[indexPath.row]
        
        if indexPath.row > 0 {
            let customCell = self.tripsCellView.dequeueReusableCell(withIdentifier: TripsTVC.identifier) as! TripsTVC
            customCell.configure(with: "Tourism", roundtrip: "True", departure: "March 10, 2024", arrival: "March 23, 2024", from: "YYZ", to: "OPO", vehicle: "Air")
            return customCell
        }
        
        return cell
    }

任何帮助将不胜感激。

swift uitableview viewcontroller
1个回答
0
投票

我想重构这些东西:

  1. 构造函数中的默认参数值
class UserTrip { //<- Class/Struct/Enum... name should be capitalized
  let type: String
  let roundtrip: String
  
  init(type: String = "Tourism", roundtrip: String = "True"...) {
    self.type = type
    self.roundtrip = roundtrip: String
    ...
  }
}

let trip = UserTrip()

在 Swift 中,您可以像上面一样提供默认的输入参数值。因此,如果您真的不想向其传递任何值,则可以省略这些参数。


  1. 最好在
    cellForRow
    之前准备好数据(tripsArray)。因为这个函数可能会被多次调用,这会导致 for 循环的性能泄漏。所以我建议这个模拟数据:
var tripsArray: [UserTrip] = [
  .init(type: "Tourism", roundtrip: "True"),
  .init(type: "Flight", roundtrip: "false"),
  ...
]

通过执行上述操作,每个

cell
将在
tripsArray
中呈现单个元素。那么
cellForRow
就更具可读性了:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let cell = ...
  let data = tripsArray[indexPath.row]
  cell.configure(...)
  return cell
}
© www.soinside.com 2019 - 2024. All rights reserved.