我正在尝试创建一个应用程序来获取用户的输入并填充一个类,然后将该数据存储在我想要检索并填充 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
}
任何帮助将不胜感激。
我想重构这些东西:
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 中,您可以像上面一样提供默认的输入参数值。因此,如果您真的不想向其传递任何值,则可以省略这些参数。
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
}