如果声明不在公共职能部门工作? [Swift 3.0 - Xcode]

时间:2017-06-29 01:32:45

标签: swift xcode function if-statement public

我试图通过设置条件来整理我的数据,所以我可以将它呈现在表格中。我的条件是AllData.count必须等于4.即使它等于4,我的数据也不会附加到我的新数组中? 谁能告诉我什么出错?

var AllData = [String]()
var DataTable = [String]()

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
    if AllData.count == 4 {
        DataTable.append(contentsOf: AllData)
        print("appended")
    }

    for i in stride(from: 0, to: DataTable.count - 1, by: 4) {
        cell.textLabel?.text = DataTable[i]
    }

    return cell
}

override func viewDidLoad(){
    print("AllData count ------->",AllData.count)
    print("Datatable count---------->",DataTable.count)
    super.viewDidLoad()
}

输出: AllData计数-------> 4 数据表计数----------> 0

2 个答案:

答案 0 :(得分:0)

首先,如果您在tableview上看不到任何内容,请检查viewDidLoad中是否正确设置了委托和数据源。喜欢这个

override func viewDidLoad(){
    self.tableView.delegate = self
    self.tableView.dataSource = self
}

viewDidLoadcellForRowAt之前完成。所以日志AllData count -------> 4 Datatable count----------> 0似乎是正确的。

但是,cellForRowAt出了问题。您是说,如果AllData中有四个元素为真,请将AllData中的所有内容追加到DataTable。然后循环DataTable并为您的UILabel分配值?这样,您的标签将只包含DataTable的最后一个元素的数据。而且,每次准备一个单元格时都会调用cellForRow。因此,对于第二个单元格,DataTable将在AllData中有两次相同的数据,并且在循环中,您仍然会将最后一个分配给标签。因此,在没有更多代码的情况下,您将在每个单元格上显示一个表格视图,显示AllData数组中的最后一个元素

答案 1 :(得分:0)

问题是cellForRowAt:indexPath仅在单元格为dequeued时才会被调用,因此您的逻辑只会在首次加载屏幕时或在您滚动{{1}时触发}}。相反,您要创建的是tableView,每次func updateDataSource() AllData时都会调用appended。如果你更新tableView:insertRowAtIndexPath,你还必须在你的内部呼叫tableViewDataSource,这会将新的小区添加到你的tableView。如果这不起作用,只需致电tableView.reloadData()