如何在Swift中编写任何(s:SequenceType)
Swift似乎没有任何()或全部()的函数,所以我试图让自己的。 我得到的最接近的是
func any<S: SequenceType
    where S.Generator.Element: BooleanType>
    (sequence: S) -> Bool{
    var __g = sequence.generate() 
    var first_element = __g.next()
    if first_element == nil{
        return false
    }
    return reduce(sequence, first_element!, {$0 || $1})
}
编辑 :根据评论,这个功能应该看起来像这样
func any<S: SequenceType
    where S.Generator.Element: BooleanType>
    (sequence: S) -> Bool{
    return reduce(sequence, false, {$0 || $1})
}
编译器告诉我
'S.Generator.Element' is not convertible to 'Bool'
在我看来,我明确地告诉编译器它在第二行。 我错过了什么?
  你的问题是, next返回一个可选项。  这意味着reduce期望返回一个可选项, $0是一个可选项。  您将不得不打开可选项才能使用||  运营商。  你也不知道该类型是Bool ,只是它是一个BooleanType 。  你必须通过调用boolValue将它转换为实际的Bool : 
func any<S: SequenceType
    where S.Generator.Element: BooleanType>
    (sequence: S) -> Bool{
    var __g = sequence.generate() 
    var first_element = __g.next()
    if first_element == nil{
        return false
    }
    return reduce(sequence, first_element!.boolValue, {$0 || $1})
}
但是,在这种情况下,我认为简单是最好的:
func any<S: SequenceType
    where S.Generator.Element: BooleanType>
    (sequence: S) -> Bool{
    for element in sequence {
        if element.boolValue {
            return true
        }
    }
    return false
}
  这实际上更高效,因为它一找到第一个true就会返回,而不是总是贯穿整个事情。 
上一篇: How to write any(s : SequenceType) in Swift
下一篇: how to calculate 24?
