我想在进度条读取是否在我的阵列完成已完成值,如果有删除线完成,进度条也会随之变化时
对不起,我可能不太清楚,但我想要如下
这是我的代码
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但它无效
你有一个新的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)
}
}
您还没有提供这标志着列表为完整的代码。
但是,根据您的实现,您必须在将列表标记为完成后重新分配具有相同值的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)
试试这个:
@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)
}
}