如何使用进度条快速显示数组计数

时间:2018-06-21 02:37:10

标签: ios swift nsarray progress

我希望进度条读取数组中的completed是否已完成值,如果完成后出现删除线,进度条也会更改

对不起,我可能不太清楚,但我想要以下内容

enter image description here

这是我的代码

   class ListTableViewController: UITableViewController {     

   @IBOutlet weak var progressView: UIProgressView!

   var progress: Float {
       if item.lists.count > 0 {
           return Float(item.lists.filter({$0.completed}).count) / Float(item.lists.count)
       } else {
           return 0
       }
   }

   var item: ItemCard! {
       didSet {
           if let progressView = progressView {
           // it's not work
           progressView.setProgress(progress, animated: true)
           }
       }
}

这是我的数据。列表= ItemCard中的列表。我想在列表中完成进度栏的显示。

class ItemCard: NSObject, Codable {

  var title: String
  var isFinish: Bool
  var lists = [List]()


  init(title: String, isFinish: Bool) {
      self.title = title
      self.isFinish = false
      super.init()
  }
  }

class List: NSObject, Codable {

  var name: String
  var completed:Bool

  init(name:String, completed:Bool) {
      self.name = name
      self.completed = completed
  } 
 }

我将didSet用于项目变量,但无效

3 个答案:

答案 0 :(得分:0)

尝试一下:

@IBOutlet weak var progresview: UIProgressView!
let sampleArray = [10, 20, 30, 40, 50,60,70,80]
let arrayCount = sampleArray.count
if sampleArray.count > 0 {
   for i in 1...sampleArray.count {
                let progress = (Float((Int(i)))/Float(arrayCount))
                self.progressview.setProgress(Float(progress),animated:true)
    }
}

答案 1 :(得分:0)

每次您有一个新的ItemCard时,请计算已完成列表的数量,除以列表数量,然后更新进度。 应该看起来像这样。

var item: ItemCard! {
    didSet {
        let completedListsCount = self.item.lists.map { $0.completed }
                                                 .filter { $0 }
                                                 .count
        let progress = Double(completedLists.count / self.item.lists.count)
        progressView.setProgress(progress, animated: true)
    }
}

答案 2 :(得分:0)

您尚未提供将列表标记为完整的代码。

但是,根据您的实现,在将列表标记为完整后,您必须使用相同的值重新分配self.item。例如,如果您将列表标记为“完整”,则点击didSelectRowAt会像

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let item = self.item
    let list = item!.lists[indexPath.row]
    list.completed = true

    self.item = item

    tableView.reloadRows(at: [indexPath], with: .automatic)
}

或在将列表标记为完成后立即调用以下代码

progressView.setProgress(progress, animated: true)