2015-04-29 2 views
2

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

мне нужно сделать для в петле на этой 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, в качестве моего заполнителя?

+0

'NSNull', вероятно, определяется как всегда возвращающий' false' из любого сравнения '==' или '! ='. Вот как это делает NULL в большинстве мест ... – nhgrif

ответ

5

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 для пустых слотов.

+0

Не будет ли '' NSNull'' работать, даже если это не одиночный объект? Не следует ли это, потому что это одноэлементный объект, который '===' мог бы работать (сравните ссылки?). – nhgrif

+0

Поскольку это синглтон, вы можете проверить, есть ли элемент массива '== [NSNull null]' (в обозначении Objective-C). –

+0

@HotLicks Objective-C '== [NSNull null]' является ссылочным сравнением. '==' в Swift будет больше похож на выполнение 'isEqual: [NSNull null]]' в Objective-C, но '===' является ссылочным сопоставлением Swift. – nhgrif

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