我有一个符合Codable协议的结构。我发出一个URLSession请求并收到一个JSON响应。我将响应编码为如下所示的自定义结构。
struct Weather: Codable {
let time: Date
let location: String
let timeEvents: [TimeEvents]
}
struct TimeEvents: Codable {
let validTime: Date
let parameters: [Parameters]
}
struct Parameters: Codable {
let name: String
let unit: String
let values: [Double]
}
我得到一个对象Weather。但是,在对象Weather中,我要填充validTime
, ie 01/01/2018 12:00
,并用与之匹配的“ {温度”和相应的name
来匹配values
。 , ie 10.5 C
。
因此,行将类似于:
[01/01/2018 12:00 : 10.5C]
[01/01/2018 13:00 : 11.5C]
[01/01/2018 14:00 : 11.6C]
.
.
.
[02/01/2018 00:00 : 3.1C]
[02/01/2018 01:00 : 3.1C]
在我的控制器中,我有类似的东西:
var testWeatherObject : [Weather] = []
我只想在顶部显示一个单一位置的标题,即即纽约。
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return testWeatherObject[section].timeEvents.count
}
以上内容使我的应用崩溃。我不确定如何获取正确的行数。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "WeatherDataCell", for: indexPath)
return cell
}
答案 0 :(得分:0)
您可以访问一个空数组,这样
return testWeatherObject.first?.timeEvents.count ?? 0
答案 1 :(得分:0)
如果只想一个部分,则不必设置。删除以下代码行:
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
现在,如果您希望每个timeEvent具有一个表格视图单元格,则应创建天气对象
var testWeatherObject = // your Weather object
,在数据源方法numberOfRowInSection中,只是说我想要与testWeatherObject具有timeEvents一样多的单元格
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return testWeatherObject.timeEvents.count
}
但是,我建议不要将Weather对象用作变量。相反,您应该创建TimeEvents数组
var timeEvents = [/* your TimeEvents objects*/]
在表视图数据源方法中仅使用此
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return timeEvents.count
}
答案 2 :(得分:0)
如果没有节,则无需实现numberOfSections(in tableView: UITableView)
如果仅使用单个Weather对象,为什么不将testWeatherObject的定义更改为
var testWeatherObject = [TimeEvents]
,然后您的numberOfRowsInSection
将变为
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return testWeatherObject.count
}
答案 3 :(得分:0)
由于您要访问的嵌套数组为空而崩溃。
我会先检查testWeatherObjects.count
是否是0
。如果没有,那么您可以继续使用testWeatherObject[section].timeEvents.count
答案 4 :(得分:0)
在情节提要或xib中定义的单元格标识符是否与“ WeatherDataCell”匹配?
我制作了一个简单的tableview应用示例。 https://github.com/y-okudera/TableViewDemoApp
希望能对您有所帮助。