Swift等价于valueForKey:

时间:2015-12-24 03:17:18

标签: objective-c swift collections

这个问题涉及Swift集合类型,Swift中的不是 Objective-C NS集合类型。

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

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

注意:这个问题是许多人标记为副本的副本,因为这个问题是关于Swift是否有一种新的方式来调用valueForKey:在Swift集合上类型即可。这个问题是关于如何调用valueForKey:在Objective-C NS集合类型的Swift 。换句话说,这个问题解决了如何以新的Swift方式做事,而不是以Objective-C方式做Swift。此外,该问题没有明显的接受答案。

2 个答案:

答案 0 :(得分:6)

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 }

<强>目标C

对于互操作性,您还可以使用强制转换来继续使用valueForKey:valueForKeyPath:

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

如果您在Swift中使用Objective {C NS集合类型,例如NSDictionary,那么您仍然可以继续使用Swift语法调用valueForKey:

let names = items.valueForKey("firstName")

答案 1 :(得分:0)

我想你想要处理一些JSON响应。看看SwiftyJSON。这是使用JSON的好方法。

您可以这样做:

让json = JSON(jsonObject)

让name = json [“firstName”]。stringValue