当前位置: 首页 > 面试题库 >

测试对象在Swift数组中是否存在的简写?

卢翔宇
2023-03-14
问题内容

目前,我有一个这样的对象数组:

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...
}

是否有我缺少的速记语法或更好的方法?


问题答案:

为什么不使用内置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

第一个以谓词为参数。

if contains(myArr, { $0.name == "Def" }) {
    println("yes")
}

更新:从Swift 2开始, 两个全局contains()函数都已被 协议扩展方法 取代:

extension SequenceType where Generator.Element : Equatable {
    func contains(element: Self.Generator.Element) -> Bool
}

extension SequenceType {
    func contains(@noescape predicate: (Self.Generator.Element) -> Bool) -> Bool
}

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

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

斯威夫特3:

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


 类似资料:
  • 问题内容: 我想先测试Firebase中是否存在数据,然后再添加它。但是我的方法有问题:我尝试使用此Javascript代码列出所有数据: 但是,如果该用户不存在,则会在之前添加该用户,然后我的代码会说该用户存在。您会说这是正常的,因为仅在“ child_added”时才调用我的警报,但是我不知道该怎么做。 我也尝试使用“值”事件,但我的“ message.name”为空。 我该如何解决? 问题答

  • 如果我有以下对象数组: 是否有一种方法可以在数组中循环,以检查特定用户名值是否已经存在,如果它什么也不做,但如果它不做,则使用所述用户名(和新ID)向数组中添加一个新对象? 谢谢!

  • 本文向大家介绍写个方法判断数组对象中是否存在某个对象相关面试题,主要包含被问及写个方法判断数组对象中是否存在某个对象时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 在Swift中,是否有任何方法可以检查数组中是否存在索引而不会引发致命错误? 我希望我可以做这样的事情: 但是我明白了 致命错误:数组索引超出范围 问题答案: Swift中的一种优雅方式:

  • 问题内容: 使用Swift 3。 我在网上发现许多奇怪的解决方案,用于检查对象是否为整数。一切都比需要的复杂得多。 这是我的解决方案: 在我的测试中,这可行。我的问题是我缺少明显的东西吗? 问题答案: 感谢您的评论!这是我现在正在使用的。