根据3个数组中的数据创建TableView部分

时间:2018-02-08 14:37:09

标签: ios arrays iphone swift uitableview

我有3个阵列,即今天,这个周,等,即时和我想根据所有三个数组中的数据创建部分,如果所有数组计数大于0然后是3个部分,如果计数2然后是两个部分,如果没有数据任何数组然后不创建该部分那么在tableView委托方法中创建它的最佳条件是什么?提供此代码的任何替代方案! 提前致谢!! 快乐编码!!

目前我的代码是:

func numberOfSections(in tableView: UITableView) -> Int {
    if self.todayDataAry.count > 0 {
        if self.thisWeekDataAry.count > 0 {
            if self.upcomingDataAry.count > 0 {
                return 3 // all sections today,this week,upcoming
            } else {
                return 2 //today,this week
            }
        } else {
            if self.upcomingDataAry.count > 0 {
                return 2 //today,upcoming
            } else {
                return 1 //today
            }
        }
    } else {
        if self.thisWeekDataAry.count > 0 {
            if self.upcomingDataAry.count > 0 {
                return 2 //this week, upcoming
            } else {
                return 1 //this week
            }
        } else {
            if self.upcomingDataAry.count > 0 {
                return 1 //upcoming
            } else {
                return 0 //no data
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

创建另一个数组并在其中存储3个数组

var allDetails = [todayAry, thisWeekAry, upcomingAry]
var filteredDetails = allDetails.filter { !$0.isEmpty }

然后改变这样。过滤器删除空数组并返回非空数组计数。

func numberOfSections(in tableView: UITableView) -> Int {
   return filteredDetails.count
}



func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
   return filteredDetails[section].count
}

你也可以在cellForRow方法中做同样的事情

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
   var cell:UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "cell")
   if cell == nil
   {
     cell = UITableViewCell.init(style: UITableViewCellStyle.default, reuseIdentifier: "tripHistory")
   }
   cell.textLabel.text = filteredDetails[indexPath.section][indexPath.row]
}