比较一个结构的两个值并在 UITableView swift 4.0 中获取额外的单元格

Posted

技术标签:

【中文标题】比较一个结构的两个值并在 UITableView swift 4.0 中获取额外的单元格【英文标题】:compare two values of one struct and getting extra cells in UITableView swift 4.0 【发布时间】:2018-05-21 05:53:18 【问题描述】:

我的代码包含一个表格视图,我试图比较一个结构中的两个值,它给了我数组的总数,同时它甚至打印包含甚至不需要的额外单元格的比较数据。我想比较 cellID 和 cellID2 的值,如果它们匹配,那么它应该只打印那些单元格!!!有人可以帮我解决这个错误

import UIKit

struct One 
    let cellID: String
    let name: String
    let lastName: String
    let cellID2: String


class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 
    var arrayOne = [One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "1"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "1"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "2"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "1"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "2"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "1")]

    @IBOutlet weak var compareTableView: UITableView!

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return arrayOne.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "CompareTableViewCell") as! CompareTableViewCell
        let arrayID = arrayOne[indexPath.row]
        if arrayID.cellID == arrayID.cellID2
            cell.lblOne.text = arrayID.cellID
            cell.lblTwo.text = arrayID.cellID2
            cell.lblThree.text = arrayID.lastName
            cell.lblFour.text = arrayID.name
        
        return cell
    

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
        return 80
    

【问题讨论】:

你的方法不对。首先,您应该从数组中过滤掉您不想在表格视图中显示的元素。然后,您将使用该过滤后的数组作为数据源。如果您遵循这一点,您就不必在 cellForRowAt:.. 函数中编写奇怪的条件。 @nayem 你能帮我过滤数组吗 我想比较 cellID 和 cellID2 的值,如果它们匹配,那么它应该只打印那些单元格!!! 在下面查看我的答案 @nayem 是的,我正在尝试 【参考方案1】:

首先,您应该从数组中过滤掉您不想在表格视图中显示的元素。然后,您将使用该过滤后的数组作为您的数据源。您不必在 cellForRowAt:.. 函数中编写奇怪的条件。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 
    let arrayOne = [One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "1"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "1"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "2"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "1"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "2"), One(cellID: "1", name: "hello", lastName: "hello last", cellID2: "1")]

    var filteredArray = [One]()

    @IBOutlet weak var compareTableView: UITableView!

    override func viewDidLoad() 
        super.viewDidLoad()
        // Here you apply your filter
        filteredArray = arrayOne.filter  $0.cellID == $0.cellID2 
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return filteredArray.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "CompareTableViewCell") as! CompareTableViewCell
        let arrayID = filteredArray[indexPath.row]
        // Feed your cell
        return cell
    

【讨论】:

我有 4 个值与我的数组匹配,但它甚至打印了不匹配的值 好的。不要像这样编辑答案。它应该是评论。您错过了tableView(:cellForRowAt:) 中的部分。你必须在这里使用filteredArray 好的,我使用它并且它工作成功,但是如果我想将一个数组值与一个变量进行比较,我应该怎么做???? if let userID = companyDefaultValue.string(forKey: "user_type_id") print("user type ID=(userID)") 我想将此值与我的一个结构值进行比较 嗯,这是另一个问题。你应该寻找类似的东西或单独提出一个新问题。

以上是关于比较一个结构的两个值并在 UITableView swift 4.0 中获取额外的单元格的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE - 计算两个值并在视图中显示结果

比较 SQL Server 中 3 列之间的日期值并在 SQL Server 中提取资产信息

将行与标题进行比较,然后在列中插入值并在 VBA 中进行重复检查

如何访问数组类型值并在两个不同的列中设置火花?

如何遍历 2 个文件中的行,比较值并在满足条件时更新文件中的值?

从两个数据范围中获取值并在连接中使用它?