Как я могу перебирать все элементы в NSMapTable в Swift

Я пытаюсь сделать что-то подобное в Swift, но не работает. Ошибка: Type() не соответствует типу BooleanType

//visibleCollectionReusableHeaderViews is of type NSMapTable!

var enumerator: NSEnumerator = visibleCollectionReusableHeaderViews.objectEnumerator()
var myValue: AnyObject!

while (( myValue = enumerator.nextObject()))
{

}

Что я делаю неправильно? Я не думаю, что я понимаю, как перебирать NSMapTable или даже просто получить первый элемент в нем.

Ответ 1

В Swift это выполняется с использованием условного присваивания.

let enumerator = visibleCollectionReusableHeaderViews.objectEnumerator()

while let myValue: AnyObject = enumerator.nextObject() {
    println(myValue)
}

Обратите внимание на необязательный тип для myValue. В противном случае этот цикл был бы бесконечным, так как myValue продолжал принимать нулевые объекты.

Ответ 2

Или более четкий и более короткий подход (Swift 3):

for key in table.keyEnumerator() {
    print(key)
}

for object in table.objectEnumerator() ?? NSEnumerator() {
    print(object)
}

Ответ 3

В Swift 3 вы можете использовать цикл for-in через свойство allObjects:

for myValue in visibleCollectionReusableHeaderViews.allObjects {
  // do stuff
}