swift – 检查自定义对象数组是否包含特定的自定义对象
发布时间:2020-12-14 05:45:42 所属栏目:百科 来源:网络整理
导读:说我有一个非常简单的Person类 class Person { var name:String init(name:String) { self.name = name }} 我希望将一个这样的人的集合存储在一个属性中,该属性是一个Person类的数组,类型为Person class People { var list:[Person] = []} 也许我实现如下 va
说我有一个非常简单的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(基于名称或身份). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |