gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:05:41 24 4
gpt4 key购买 nike

假设我有一个非常简单的Person

class Person {
var name:String
init(name:String) {
self.name = name
}
}

并且我希望将此类 Person 的集合存储在 People 类的属性中,该属性是 Person 类型的数组

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

也许我可以按如下方式实现

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

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

我的简单尝试,我希望返回true

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,因此 contains 需要有一个谓词alex 不是谓词。

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

person.list.contains(alex)

由于它们不相等,您可以使用第二个 contains 函数:

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

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

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

或者您可以使Person成为Equatable(基于name或身份)。

关于swift - 检查自定义对象数组是否包含特定自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52765056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com