快速向阵列添加数据

时间:2018-10-02 07:35:07

标签: arrays swift

我需要将数据添加到数组。 但是,使用我的代码:它会覆盖数据而不是附加数据?

import UIKit
class Productreview: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var Item:String!   //Data from another viewcontroller
    var list:[String] = [] //The array



    //Update func
    func updatelist() {
        var listupdate = list
        listupdate.append(Item)
        list = listupdate
    }


    override func viewDidLoad() {
        super.viewDidLoad()
        updatelist()
        // Do any additional setup after loading the view.
    }


    //Sets the tableView-data
    @IBOutlet weak var tableView: UITableView!
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return (list.count)
    }
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "cell")
        cell.textLabel?.text = list[indexPath.row]
        return(cell)
    }
}

2 个答案:

答案 0 :(得分:0)

import UIKit
class Productreview: UIViewController, UITableViewDataSource, UITableViewDelegate {

    // You have to write lowercase . Not write 'Item' 
    var item:String!   //Data from another viewcontroller
    var list:[String] = [] //The array

    override func viewDidLoad() {
        super.viewDidLoad()

        // You have to define delegate and datasource
        self.tableView.delegate = self
        self.tableView.dataSource = self

        updatelist()
        // Do any additional setup after loading the view.
    }

    //Update func
    func updatelist() {
        var listupdate = list
        listupdate.append(item)
        list = listupdate
        self.tableView.reloadData() // Dont forget this for showing elements.
    }

    //Sets the tableView-data
    @IBOutlet weak var tableView: UITableView!
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return list.count
    }
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "cell")!
        cell.textLabel?.text = list[indexPath.row]
        return cell 
    }
}

答案 1 :(得分:0)

这看起来很多余。

func updatelist() {
    var listupdate = list
    listupdate.append(Item)
    list = listupdate
}

为什么不将其直接添加到列表中?

func updatelist() {
    list.append(Item)
}

我看到您正在更新viewDidLoad中的列表。因此,数组中将只有一个String。因此,我怀疑您每次都创建一个ProductReview的新实例,而不将先前的列表保存在任何地方。因此,您需要做的是每次将列表添加到列表后都保存该列表,但不要保存在ProductReview内。

现在我考虑一下。当您仅使用变量Item将值附加到list中的viewDidLoad时有什么用途?

解决方案:

因此,我的建议是您形成列表并将列表传递给ProductReview实例。


旁注:就像@AshelyMills在评论中指出的那样,对Swift中的变量使用 lowerCamelCase