Как проверить, является ли элемент NSMutableArray NSNull или AnyObject

У меня есть PersonsArray: NSMutableArray = [NSNull, NSNull, NSNUll, NSNull, NSNull, NSNUll, NSNull], Мне понадобилось семь слотов, которые я затем мог бы заполнить записью Entity CoreData как AnyObject.

Мне нужно сделать цикл for в этом NSMutableArray...

Если слот индекса равен NSNull, я хочу перейти к следующему слоту индекса, если слот индекса заполнен моим объектом, я хочу выполнить код для этого объекта.


example PersonsArray: NSMutableArray = [
    NSNull,
    NSNull,
    NSNull,
    "<iswift.Person: 0x7f93d95d6ce0> (entity: Person; id: 0xd000000000080000 <x-coredata://8DD0B78C-C624-4808-9231-1CB419EF8B50/Person/p2> ; data: {\n    image = nil;\n    name = dustin;\n})",
    NSNull,
    NSNull,
    NSNull
]

Попытка

for index in 0..<PersonsArray.count {
        if PersonsArray[index] != NSNull {println(index)}
}

предлагает кучу изменений, которые тоже не работают, как

if PersonsArray[index] as! NSNull != NSNull.self {println(index)}

или же

if PersonsArray[index] as! NSNull != NSNull() {println(index)}

ПРИМЕЧАНИЕ: использование NSNull является просто заполнителем в NSMutableArray, так что его счет ВСЕГДА 7, и я могу заменить любой из (7) слотов на объект. Должен ли я использовать что-то кроме NSNull в качестве заполнителя?

1 ответ

Решение

NSNull() является одноэлементным объектом, поэтому вы можете просто проверить, является ли элемент массива экземпляром NSNull:

if personsArray[index] is NSNull { ... }

или используйте оператор "идентично":

if personsArray[index] === NSNull() { ... }

В качестве альтернативы вы можете использовать массив опций:

let personsArray = [Person?](count: 7, repeatedValue: nil)
// or more verbosely:
let personsArray : [Person?] = [ nil, nil, nil, nil, nil, nil, nil ]

с помощью nil для пустых слотов.

Другие вопросы по тегам