Как я могу перебирать все элементы в 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
}