UITableView显示循环的最后一个值

我想在tableview中显示这个循环的所有值。 代码是计算贷款摊销表。 我试图保存数组中的循环数据,但它总是给我最后的值。 我真的被困在这个。 那么请问我该怎么做? 这是我的代码:

import UIKit class tableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet var tableView: UITableView! var arr = [Int]() var cell:tableCell! var TPayment: float_t! // calls value of 59600 from main controller var years1: float_t! // number of months = 180 ( 15 years) var monthlyPayment: float_t! // 471 var interest: float_t! // 5% var principil: float_t! //222 var interestrate: float_t! // 249 var initil: float_t! var data = Array<float_t>() var data2: NSMutableArray = [] override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self let c = Int(years1) arr += 0...c tableCalculation() // Register custom cell let nib = UINib(nibName: "table", bundle: nil) tableView.registerNib(nib, forCellReuseIdentifier: "cell") } func tableCalculation() { let years = Int(years1) initil = TPayment - 0 for i in 0..<years { initil = initil - principil interest = initil * interestrate principil = monthlyPayment - interest print("Month : \(monthlyPayment), principil: \(principil),interest: \(interest), initi: \(initil)") data = [interest] self.data2 = [initil] } } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return arr.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! tableCell cell.lbl1.text = "\(arr[indexPath.row])" cell.lbl2.text = "\(monthlyPayment)" cell.lbl3.text = "\(data[indexPath.row % data.count])" cell.lbl4.text = "\(principal)" cell.lbl5.text = "\(self.data2[indexPath.section])" return cell } func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { print("Row \(indexPath.row) selected") } func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return 40 } } 

与UITableView的表视图

表格视图与print()

主要的问题是你的数据数组。

在你的循环中你填充你的数据数组,在tableCalculation ,有这样的:

 data = [interest] 

这意味着对于每次迭代,您数据数组设置[interest]而不是新项目追加到数组。

你应该做什么:

 data.append(interest) 

请注意,您在self.data2犯了同样的错误。 但现在你知道如何解决这种错误。

cellForRowAtIndexPath方法中,您将提供相同的数据来打印,看起来像问题

我没有太多的标签,但你可以根据需要改变它

对于lbl2和lbl4,你传递的是同一个单一的floatvariables,这就是为什么它显示相同的值,如果你想显示每行的不同的值,你应该把它存储在数组中,并在cellForRowAtIndexPath得到它就像你在做为lbl1

 cell.lbl2.text = currencyFormatter(monthlyPayment) cell.lbl4.text = currencyFormatter(principil) 

对于lbl5你的代码单元格代码应该是这样的

 cell.lbl5.text = "\(self.data2[indexPath.row])" 

对于lbl 3&lbl 5当我用静态值执行这个代码来获得兴趣时,它只在数组中存储一个值

 for i in 0..<years { let interest = 5.0 * 4.0 data = [interest] } 

要存储您在数组中计算的每个值,您应该使用append

 data.append(interest) self.data2.append(initil) 

因为在每个索引path中数组中只有1个值,所以按照您的模数运算给出数组中的第0个值,所以它在每一行中显示相同的值