加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Swift中编写任何(s:SequenceType)

发布时间:2020-12-14 05:24:32 所属栏目:百科 来源:网络整理
导读:Swift似乎没有任何()或所有()的函数,所以我试图创建自己的函数.我得到的最接近的是 func anyS: SequenceType where S.Generator.Element: BooleanType (sequence: S) - Bool{ var __g = sequence.generate() var first_element = __g.next() if first_elemen
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
}

这实际上也更有效,因为它一找到第一个就返回而不是总是通过整个事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读