swift – 检查自定义对象数组是否包含特定的自定义对象

我有一个非常简单的Person类
class Person {
    var name:String
    init(name:String) {
        self.name = name
    }
}

我希望将一个这样的人的集合存储在一个属性中,该属性一个Person类的数组,类型为Person

class People {
    var list:[Person] = []
}

也许我实现如下

var alex = Person(name:"Alex")
var people = People()
people.list.append(alex)

问题:我如何检查people.list是否包含实例alex,好吗?

我的简单尝试,我希望回归真实

people.list.contains(alex)

调用错误“无法将类型’Person’的值转换为预期的参数类型’@noescape(Person)throws – > Bool’”

有两个包含功能
extension SequenceType where Generator.Element : Equatable {
    /// Return `true` iff `element` is in `self`.
    @warn_unused_result
    public func contains(element: Self.Generator.Element) -> Bool
}

extension SequenceType {
    /// Return `true` iff an element in `self` satisfies `predicate`.
    @warn_unused_result
    public func contains(@noescape predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Bool
}

编译器抱怨,因为编译器知道Person不是Equatable,因此需要包含谓词,但alex不是谓词.

如果你的数组中的人是Equatable(他们不是),那么你可以使用:

person.list.contains(alex)

由于它们不是等同的,您可以使用第二个包含函数

person.list.contains { $0.name == alex.name }

或者,正如Martin R所指出的那样,基于“身份”:

person.list.contains { $0 === alex }

或者你可以使Person成为Equatable(基于名称或身份).

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...