Arrays 快速测试Swift数组中是否存在对象?

Arrays 快速测试Swift数组中是否存在对象?,arrays,swift,Arrays,Swift,目前,我有一组对象,如下所示: var myArr = [ MyObject(name: "Abc", description: "Lorem ipsum 1."), MyObject(name: "Def", description: "Lorem ipsum 2."), MyObject(name: "Xyz", description: "Lorem ipsum 3.") ] let item = myArr.filter { $0.name == "Def" }.first

目前,我有一组对象,如下所示:

var myArr = [
  MyObject(name: "Abc", description: "Lorem ipsum 1."),
  MyObject(name: "Def", description: "Lorem ipsum 2."),
  MyObject(name: "Xyz", description: "Lorem ipsum 3.")
]
let item = myArr.filter { $0.name == "Def" }.first
if item != nil {
  // Do something...
}
我正在测试对象是否存在,然后再进行如下操作:

var myArr = [
  MyObject(name: "Abc", description: "Lorem ipsum 1."),
  MyObject(name: "Def", description: "Lorem ipsum 2."),
  MyObject(name: "Xyz", description: "Lorem ipsum 3.")
]
let item = myArr.filter { $0.name == "Def" }.first
if item != nil {
  // Do something...
}
但我正在寻找一种更短的方法来实现这一点,因为我经常这样做。我想这样做,但无效:

if myArr.contains { $0.name == "Def" } {
  // Do something...
}

是否有我缺少的任何速记语法或更好的方法来实现这一点?

要实现所需的行为,您必须为数组创建一个扩展类,该扩展类类似于:

extension Array {
    func contains(test: (T) -> Bool, action: (T) -> Void) {
        let filtered = self.filter(test)
        if(filtered.is​Empty) {
            action(filtered)
        }
    }
}
我前面没有xcode,因此如果出现语法错误,我向您道歉。但是,如果您经常使用,您可以按如下方式编写

myArr.contains({ $0.name == "Def"}) {
   // Do something...
}

我会将其重命名为以防止代码中出现混淆。

为什么不使用内置的
contains()
函数?它有两种口味

func contains<S : SequenceType, L : BooleanType>(seq: S, predicate: @noescape (S.Generator.Element) -> L) -> Bool
func contains<S : SequenceType where S.Generator.Element : Equatable>(seq: S, x: S.Generator.Element) -> Bool
更新:从Swift 2开始,两个全局
contains()
函数都具有 已被协议扩展方法取代:

第一个(基于谓词的)用于:

if myArr.contains( { $0.name == "Def" }) {
    print("yes")
}
Swift 3:

if myArr.contains(where: { $0.name == "Def" }) {
    print("yes")
}

这个问题与其他问题有何不同?它们看起来几乎是相同的数组,完全不同的问题。如果数组中存在项,我需要一个布尔值。其他的问题是如何从数组中移除它。我正在学习和挑选Swift。似乎我已经对所有东西进行了长时间的删除、包含、查找等操作。我被下划线.js宠坏了,希望Swift中也有类似的东西:我也被C#中的内置lambda表达式宠坏了:(但是你是不是被宠坏了,以至于你都懒得阅读文档或学习语言了?下一个问题是:沮丧地发现有一个
包含
以谓词表示,但不是
find
…如果包含(myArr,{$0.name==“Def”}{println(“yes”)}如何使用此函数从数组中获取当前对象statement@anishparajuli:
contains()
仅检查数组中是否存在元素。这可能更符合您的要求。@MartinR基本上我正在尝试从数组中删除对象…没有索引..您能帮忙吗?@MartinR我成功地使用了筛选方法..但这是一种好方法吗?如果我错了,请纠正我,但不会
self.filter(test)
如果没有一个元素通过测试,则生成一个空数组,因此在这种情况下永远不会为零?我可以更新答案,因为只需要检查数组的大小,尽管苹果现在提供了适合个人需要的功能。