2016-04-27 56 views
0

我希望像anArray.contains(nil)可以工作,但事实并非如此。Swift最好的方法来检查收集类型中的零

我能做的最好的就是创建这样一个扩展:

extension Array { 
    func containsNil() -> Bool { 
     return self.filter({ $0 == nil }).count > 0 
    } 
} 

没有其他的想法?

+0

如果包含'nil',你想要做什么? – Eendje

+1

你的用例是什么?只能包含可选项的数组可以包含'nil'。你想防止'无'值?如果是这样,只需将数组变平:let vals:[Int?] = [1,2,3,nil]; let flat = vals.flatMap {$ 0} as [Int?];' – JAL

+3

你现在有两条评论关于用例的原因是因为这几乎都是确定性的[XY问题](http:// meta。 stackexchange.com/q/66377/244435)。 – nhgrif

回答

1

您的扩展程序将始终必须遍历所有元素,才能计算nil元素的数量。如果计数大于0,则返回。您正在收集比您需要的更多信息。你似乎没有使用nil元素的数量。你所关心的只是阵列内部是否有零。

相反,您可以简单地遍历数组,并在第一次找到nil时返回true。

+0

是的,我知道,但这需要更多的代码行。我想避免这种情况。 – BridgeTheGap

+4

如果你真的想把它缩短,你可以这样做:'.contains {$ 0 == nil}'。但先检查你的问题的意见。正如nhgrif所说,这可能是一个XY问题。 – Eendje

相关问题