Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在UITableView中访问字典数组有多个部分_Ios_Swift_Uitableview - Fatal编程技术网

Ios 如何在UITableView中访问字典数组有多个部分

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

我正在开发应用程序,我让后端API返回这些数据

。。。。[删除]

我创建了包含5个部分的tableView,如下所示

   // 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