Ios 如何在UITableView中访问字典数组有多个部分
我正在开发应用程序,我让后端API返回这些数据 。。。。[删除] 我创建了包含5个部分的tableView,如下所示Ios 如何在UITableView中访问字典数组有多个部分,ios,swift,uitableview,Ios,Swift,Uitableview,我正在开发应用程序,我让后端API返回这些数据 。。。。[删除] 我创建了包含5个部分的tableView,如下所示 // Number of rows each section func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if section == 0 { if let Sunday = DataServi
// Number of rows each section
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
if let Sunday = DataService.DataServiceInstance.ArrayForDay("Sunday")
{
if let ArrayPerDay:NSArray = Sunday as NSArray{
return ArrayPerDay.count
}
}
}
if section == 1 {
if let Monday = DataService.DataServiceInstance.ArrayForDay("Monday")
{
if let ArrayPerDay:NSArray = Monday as NSArray{
return ArrayPerDay.count
}
}
}
if section == 2 {
if let Tuesday = DataService.DataServiceInstance.ArrayForDay("Tuesday")
{
if let ArrayPerDay:NSArray = Tuesday as NSArray{
return ArrayPerDay.count
}
}
}
if section == 3 {
if let Wednesday = DataService.DataServiceInstance.ArrayForDay("Wednesday")
{
if let ArrayPerDay:NSArray = Wednesday as NSArray{
return ArrayPerDay.count
}
}
}
if section == 4 {
if let Thursday = DataService.DataServiceInstance.ArrayForDay("Thursday")
{
if let ArrayPerDay:NSArray = Thursday as NSArray{
return ArrayPerDay.count
}
}
}
return 0
}
func numberOfSectionsInTableView(tableView:UITableView)->Int
{
return 5
}
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 60.0
}
然后我创建一个函数来计算每天的行总数
func ArrayForDay(dayAsk:String)->NSArray?{
var TimeTableDic = [NSDictionary]()
if let FirstArray = ArrayOfRegistredModules {
for firstArrayItem in FirstArray {
if let timetableArray:NSArray = firstArrayItem["Timetable"] as? NSArray
{
for itemInTimeTable in timetableArray{
if itemInTimeTable["Day"] as? String == dayAsk{
if let appendData = itemInTimeTable as? NSDictionary{
TimeTableDic.append(appendData)
}
}
}
}
}
}
在
我试过这样做
if indexPath.section == 0 {
// Get Sunday Timetable
if let sunDayModel = DataService.DataServiceInstance.LoadData[0]["ModulesRegistered"] as? NSArray {
for itemInArray in sunDayModel {
for getTimeTable in itemInArray["Timetable"] as! NSArray {
if getTimeTable["Day"] as! String == "Sunday" {
print(getTimeTable)
}
//print(getTimeTable)
}
}
}
}else if indexPath.section == 1{
// Get Sunday Timetable
if let sunDayModel = DataService.DataServiceInstance.LoadData[0]["ModulesRegistered"] as? NSArray {
for itemInArray in sunDayModel {
for getTimeTable in itemInArray["Timetable"] as! NSArray {
if getTimeTable["Day"] as! String == "Monday" {
print(getTimeTable)
}
//print(getTimeTable)
}
}
}
}else if indexPath.section == 2 {
print("Tusday")
}
这样做的结果是尽可能多地重复节索引,例如,如果节0中有3行,我将得到
0
0
0
我想展示每天的时间表示例
星期日部分应该只显示星期日时间表,我可以显示每个部分的行数,但我不知道如何为每个部分创建单元格
多谢各位 在swift中解析JSON数据很麻烦, 我个人建议你们转换你们的节数据,并根据你们得到的节转换你们的行数组
let moduleArray:NSArry = yourJSONDict.valueforKey("ModulesRegistered") as! NSArray
moduleArray将是您的分区数据源
现在位于索引路径的地窖行中
let sectionDict:NSDictionary = moduleAray[indexpath.section] as! NSDictionary
let rowArray:NSArray = sectionDict.valueforKey("Timetable") as! NSArray
现在你们有了时间表的数组,你们可以循环遍历它,或者我个人建议NSPredict这样做
上面的代码片段只是一个逻辑,你怎么能得到你想要的,你不应该直接复制粘贴
快乐编码。。。
祝你有愉快的一天。我解决了我的问题
- 我创建了一个类来管理数据
- 我创建了每天提取数据的函数
- 我创建函数来计算每天有多少行
- 我将函数传递给tableView中的cell和numorrows
谢谢大家 很抱歉,您可以解释更多,我尝试了您的逻辑,但我不明白如何根据我的数据获取天的部分。您有行数组..现在您必须使用部分标题进行谓词,如let resultPredicate=NSPredicate(格式:“Day=%@”,部分标题)let sectionArray:nsarry=[rowAray FilterArrayWithPredict:resultPredicate]与此相反,我只是建议您更改响应并按天和模块获取数据,因为Subarray我无法更改API它超出了我的控制,我将尝试使用Aroundk,然后使用谓词,您必须循环所有模块数组并使用谓词来查找日期数据。祝您好运。发布时让我们知道结果回答一个问题,试着用一个简单的例子来说明这个问题。把这些代码放在一起会使问题更难理解,因此答案会更少。
let sectionDict:NSDictionary = moduleAray[indexpath.section] as! NSDictionary
let rowArray:NSArray = sectionDict.valueforKey("Timetable") as! NSArray