我发现.contains(Element)方法在编写Swift代码的最小经验中非常重要,并且很快就意识到Apple改变了它...
func contains(check:[[[Int]]], forElement: [[Int]]) -> Bool {
for element in check {
if areEqual(element, forElement) {
return true
}
}
return false
}
func areEqual(_ a:[[Int]], _ b:[[Int]]) -> Bool {
for i in 0..<a.count {
if a[i] != b[i] {
return false
}
}
return true
}
我一直在搞乱一些大型数组,所以我用那个笨重的函数解决了我的问题。
发生了什么事?
您如何使用the new way?
那里的例子很好,我确信他们打算这样做。
enum HTTPResponse {
case ok
case error(Int)
}
let lastThreeResponses: [HTTPResponse] = [.ok, .ok, .error(404)]
let hadError = lastThreeResponses.contains { element in
if case .error = element {
return true
} else {
return false
}
}
// 'hadError' == true
答案 0 :(得分:24)
如何使用此
let numbers = [1, 2, 3, 4]
let contains = numbers.contains(where: { $0 == 3 })
//contains == true
或者
let strings = ["A", "B", "C", "D"]
let contains = strings.contains(where: { $0 == "B" })
//contains == true
即使使用其他对象,例如NSColor
let colors: [NSColor] = [.red, .blue, .green]
contains = colors.contains(where: { $0 == .red })
//contains == true
答案 1 :(得分:3)
该API只允许您传递一个块,您可以在其中执行所需的任何检查。您可以检查给定元素是否等于某个东西,或者它的属性是否满足某些约束(例如在文档中的示例中)。你应该能够执行这样的基本相等检查:
func contains(check:[[[Int]]], forElement: [[Int]]) -> Bool {
return check.contains { element in
return areEqual(element, forElement)
}
}
func areEqual(_ a:[[Int]], _ b:[[Int]]) -> Bool {
for i in 0..<a.count {
if a[i] != b[i] {
return false
}
}
return true
}
contains块迭代每个元素并返回true
或false
。最后,对于任何元素,单个true
将为整个函数返回true
。