2015-12-24 99 views
1

這個問題是關於Swift集合類型的,不是 Swift中的Objective-C NS集合類型。Swift等價於ValueForKey:

例如,我將如何在Swift中執行此操作?

NSArray *items = // some JSON response 
NSArray *names = [items valueForKey:"firstName"]; 

注:這個問題是的一個許多的副本標記爲已的副本,因爲這個問題是關於雨燕是否有打電話valueForKey的一種新的方式:對雨燕集合類型。這個問題是關於如何調用valueForKey:在Objective-C NS收集類型上的Swift 。換句話說,這個問題解決了如何以新的Swift方式來做事,而不是做Swift Objective-C的方式。而且,這個問題沒有明顯的接受答案。

+0

@san這不是重複的,因爲這個問題。關於Swift是否有一種在Swift集合類型上調用'valueForKey:'的新方法。這個問題是關於如何在Swift中調用Objective-C NS集合類型中的'valueForKey:'。換句話說,這個問題解決了如何以新的Swift方式來做事,而不是做Swift Objective-C的方式。 –

回答

3

在Swift中沒有valueForKey:,但有一種方法可以使用map來實現類似的結果(如果不是相同的話)。

類似valueForKey:

// items contains dictionaries 
let names = items.map { $0["firstName"] as? String } 

// items contains objects 
let names = items.map{ $0.firstName } 

類似valueForKeyPath:

let streets = items.map { $0["address"]?["street"] as? String } 

Objective-C的

對於互操作性,也可以使用強制轉換爲繼續使用valueForKey:valueForKeyPath:

let streets = (items as NSArray).valueForKeyPath("address.street") as? NSArray 

如果您正在使用的Objective-C NS集合類型,比如斯威夫特NSDictionary,那麼你仍然可以繼續撥打valueForKey:斯威夫特語法。

let names = items.valueForKey("firstName") 
+0

不是Swift有它自己的字典類型,你可以使用字典[「key」]? – Arc676

+1

@ Arc676是的,這是'objectForKey:'的縮寫,它不是一回事。 –

0

我想你想處理一些JSON響應。看看,在SwiftyJSON。這是使用JSON的好方法。

你可以做這樣的事情:

讓JSON = JSON(的JSONObject)

讓名= JSON [ 「名字」] stringValue的