Swift为map
提供filter
,reduce
,Array
,...,但我找不到some
(或any
)或every
(或all
),其中JavaScript的对应部分为Array.some
和Array.every
。我不够努力或存在吗?
related question here正在寻找Swift all
方法,但JS程序员可能找不到它(JS中没有all
和some
或{{1}没有提到)。
答案 0 :(得分:5)
只需使用contains。
// check if ALL items are completed
// so it does not contain a single item which is not completed
!items.contains { !$0.completed }
// check if SOME item is completed
// so test if there is at least one item which is completed
items.contains { $0.completed }
答案 1 :(得分:4)
要替换any
/ some
,您可以使用SequenceType的contains
方法(有一个版本采用布尔谓词;另一个版本采用一个元素,仅适用于Equatable序列元件)。
没有像all
/ every
这样的内置函数,但您可以使用扩展程序轻松编写自己的函数:
extension SequenceType
{
/// Returns `true` iff *every* element in `self` satisfies `predicate`.
func all(@noescape predicate: Generator.Element throws -> Bool) rethrows -> Bool
{
for element in self {
if try !predicate(element) {
return false
}
}
return true
}
}
或者,感谢De Morgan,您可以否定contains
:!array.contains{ !predicate($0) }
的结果。
顺便说一句,这些工作在任何SequenceType上,而不仅仅是Array。这包括Set和even Dictionary(其元素为(key, value)
元组)。