首页 > 解决方案 > 无法将类型“[dataModel]”的值转换为预期的参数类型“(dataModel) throws -> Bool”

问题描述

出于某种原因,我无法比较 2 个不同的数组,例如:

if (self.data.contains(where: self.compareData)){
}

抛出:

无法将类型“[dataModel]”的值转换为预期的参数类型“(dataModel) throws -> Bool”

并尝试使用它们进行比较==也会引发错误Binary operator '==' cannot be applied to operands of type '((dataModel) throws -> Bool) throws -> Bool' and '[dataModel]'

数组的格式为:

var data : [dataModel] = [dataModel] ()
var compareData : [dataModel] = [dataModel]()

我正在检查该数组是否设置为在替换数据和更新表之前发送的相同数组。

编辑:这是数据模型代码:

class dataModel {
   var teamName : String = ""

   var aboutTeams : String = ""

   // var rate : String = "5" // team Rating

   var messageID : String = ""
}

标签: arraysswift

解决方案


那是因为您尝试使用的功能需要 NSPredicate。

检查一个数组是否包含另一个数组的子集的一种方法是执行以下操作:

var dataSet = Set(data)
var compareDataSet = Set(compareData)

if compareDataSet.isSubsetOf(dataSet) {
   // Do something
}

编辑:您的班级需要符合 equatable

class dataModel: Equatable {

    var teamName : String = ""

    var aboutTeams : String = ""

   // var rate : String = "5" // team Rating

    var messageID : String = ""

    override func isEqual(_ object: Any?) -> Bool {
        if let object = object as? dateModel {
            return self.teamName == object.teamName && self.aboutTeams == object.aboutTeams && self.messageID == object.messageID
        } else {
            return false
        }
    } 
}

推荐阅读