2016-04-27 2 views
0

Я надеялся, что что-то вроде anArray.contains(nil) будет работать, но это не так.Swift Лучший способ проверить нуль в виде коллекции

Лучшее, что я могу сделать, это создать расширение, как это:

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

Любые другие мысли?

+0

Что именно вы хотите сделать, если оно содержит 'nil'? – Eendje

+1

Каков ваш прецедент? Только массивы, которые могут содержать опции, могут содержать 'nil'. Вы хотите защитить от значений «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. Все, что вам нужно, это если в массиве есть нуль.

Вместо этого вы можете просто перебирать массив и возвращать true в первый раз, когда найдете nil.

+0

Да, я знаю, но для этого требуется больше строк кода. Я хотел этого избежать. – BridgeTheGap

+4

Если вы действительно этого хотите, вы можете просто: '.contains {$ 0 == nil}'. Но сначала проверьте комментарии к своему вопросу. Как упоминалось в nhgrif, это, вероятно, проблема XY. – Eendje

Смежные вопросы