2015-02-08 3 views
8

Как выполнить Ioop через NSMutableArray в Swift? То, что я пробовал:Цитирование через NSMutableArray в Swift

var vehicles = NSMutableArray() 

Массива содержит объекты из класса: Vehicle

for vehicle in vehicles { 
    println(vehicle.registration) 
} 

Я не могу запустить выше код без компилятора говорил мне registration не принадлежит AnyObject. На этом этапе я предположил, что это связано с тем, что я не сказал циклу for, к какому классу относится класс item. Так я доработал по коду:

for vehicle: Vehicle in vehicles { 
    println(vehicle.registration) 
} 

Теперь компилятор жалуется понижающее приведение ... как я могу просто получить доступ к пользовательской регистрации собственности в то время как цикл через массив транспортных средств?

+0

ли эта помощь? http://dev.eltima.com/post/96538497489/convert-nsmutablearray-to-swift-array –

ответ

23

Это должно работать:

for vehicle in (vehicles as NSArray as! [Vehicle]) { 
    println(vehicle.registration) 
} 
+0

И как это сделать для NSMutableArray? –

+0

Ответ Роба лучше: зачем принудить необязательный, когда вам не нужно? –

3

NSMutableArray происходит от мира Objective-C. Теперь вы можете использовать дженерики и массивные массивы, например:

var vehicles = [Vehicle]() 
... 
for vehicle in vehicles { 
    println(vehicle.registration) 
} 
+0

Спасибо за ваш ответ! Смогу ли я использовать метод 'removeObjectsAtIndexes' на вашем массиве' vehicles'? Я преобразовываю NSArray в массив, который позволяет мне использовать это по техническим причинам в моем приложении ... так долго, пока работает ваш ответ, отлично – jskidd3

+0

Конечно. Быстрые массивы не предоставляют этот метод изначально, но вы можете без особых проблем закодировать свой собственный: http://stackoverflow.com/questions/26173565/removeobjectsatindexes-for-swift-arrays (см. Ответ, который имеет наибольшее количество оборотов, это не принятый, но наиболее правильный) – Romain

11

Как предложил Ромен, вы можете использовать массив Swift. Если вы будете продолжать использовать NSMutableArray, вы могли бы сделать что-либо:

for object in vehicles { 
    if let vehicle = object as? Vehicle { 
     print(vehicle.registration) 
    } 
} 

или, если вы знаете, что это только Vehicle объекты, вы можете заставить разворачивать его:

for vehicle in vehicles { 
    print((vehicle as! Vehicle).registration) 
} 

или, как это было предложено DNagy:

for vehicle in vehicles as NSArray as! [Vehicle] { 
    print(vehicle.registration) 
} 

Очевидно, что если это возможно, вопрос в том, можно ли уйти в отставку NSMutableArray и использовать вместо этого Array<Vehicle> (aka [Vehicle]). Таким образом, вместо того, чтобы:

let vehicles = NSMutableArray() 

Вы можете сделать:

var vehicles = [Vehicle]() 

Затем вы можете сделать что-то вроде:

for vehicle in vehicles { 
    print(vehicle.registration) 
} 

Иногда мы застряли с Objective-C код, который возвращающегося NSMutableArray объектов, но если этот NSMutableArray был создан в Swift, то, вероятно, предпочтительнее использовать Array<Vehicle>.

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