比较一个结构的两个值并在 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 中获取额外的单元格的主要内容,如果未能解决你的问题,请参考以下文章
比较 SQL Server 中 3 列之间的日期值并在 SQL Server 中提取资产信息
将行与标题进行比较,然后在列中插入值并在 VBA 中进行重复检查