【问题标题】:how to use ".contains" for an object array in swift 3.0如何在 swift 3.0 中将“.contains”用于对象数组
【发布时间】:2016-11-28 18:07:02
【问题描述】:

如果需要获取特定对象数组中包含的对象,如何使用 contains。

尝试为 tableview 行选择和取消选择复选框(使用 2 个图像)。

代码:

var originalParams = [ParamsModel]()
var selectedParams = [ParamsModel]()
if selectedParams.contains(originalParams[indexPath.index]) {
            cell.btnSelect.setBackgroundImage(UIImage(named:"checked.png"), for: UIControlState.normal)
        }
        else
        {
            cell.btnSelect.setBackgroundImage(UIImage(named:"unchecked.png"), for: UIControlState.normal)
        }

我正在使用 swift 3.0。它显示编译器错误“调用中缺少参数标签 'where'”。任何帮助表示赞赏。

【问题讨论】:

  • 你在问什么?这个真的不清楚。
  • 这是否如您所愿:selectedcheckboxArray.contains(checkboxArray.objectAtIndex(indexPath.row))?
  • 顺便说一下,不要在变量名中使用“Array”。简单地使它复数,数组是隐含的。例如 selectedCheckboxes 而不是 selectedcheckboxArray
  • @AlexanderMomchliov 。正是这个 selectedcheckboxArray.contains(checkboxArray.objectAtIndex(i‌​ndexPath.row)) 是我试过的,但 objectAtIndex 不存在数组。我可以使用其他任何方法吗?
  • 哦,当然,只需为数组下标:checkboxArray[indexPath.row]。当然应该是 Swift 类型,而不是 NSArray

标签: arrays swift3 contain


【解决方案1】:

如果您希望能够在 ParamsModel 实例的数组上调用 contains(_:)ParamsModel 需要符合 Equatable

这段代码也可以更简洁地写成:

let imageName = selectedParams.contains(originalParams[indexPath.index]) ? "checked.png" : "unchecked.png"
cell.btnSelect.setBackgroundImage(UIImage(named: imageName), for: .normal)

【讨论】:

  • 谢谢。我已经使模型类符合 Equatable class ParamsModel : Equatable{ //Mark: Properties var param : String var isSelected : Bool //Mark: Instantiation init( param: String, isSelected: Bool ){ self.param = param self .isSelected = isSelected } static func == (lhs: ParamsModel, rhs: ParamsModel) -> Bool { return lhs.param == rhs.param } } 但现在包含的错误是“不能将 ParamsModel 类型的值下标为'_' 类型的索引“
  • 这听起来像是一个新问题:p
  • 我宁愿将它添加为一个新问题:P
猜你喜欢
  • 2018-07-01
  • 2021-08-28
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 2019-07-29
相关资源
最近更新 更多