2015-02-08 65 views
8

如何通過Swift中的NSMutableArray循環?我曾嘗試:在Swift中循環遍歷NSMutableArray

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 – 2015-02-08 13:10:27

回答

23

這應該工作:

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

以及如何爲NSMutableArray做到這一點? – 2016-10-29 06:13:05

+0

Rob的回答比較好:爲什麼在不需要時強制選擇? – 2017-01-16 18:55:52

3

NSMutableArray來自Objective-C世界。現在,您可以使用泛型和強類型數組,如下所示:

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

感謝您的回答!我可以在你的'vehicles'數組上使用'removeObjectsAtIndexes'方法嗎?我正在將一個NSArray轉換爲一個數組,允許我在我的應用程序中使用這個技術原因...只要你的答案是完美的就可以了 – jskidd3 2015-02-08 13:10:37

+0

當然。 Swift數組本身並不提供這種方法,但是你可以自己編寫代碼,而不會有太多麻煩:http://stackoverflow.com/questions/26173565/removeobjectsatindexes-for-swift-arrays(請參閱最有價值的答案,它是不是接受的,但最有效的) – Romain 2015-02-08 13:16:54

11

正如Romain建議的那樣,您可以使用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>(又名[Vehicle])。因此,而不是:

let vehicles = NSMutableArray() 

你可以這樣做:

var vehicles = [Vehicle]() 

然後,你可以做這樣的事情:

​​

有時候我們堅持與同時返回Objective-C代碼NSMutableArray對象,但如果這個NSMutableArray是在Swift中創建的,則最好使用Array<Vehicle>代替。