valueForKey方法的Swift等价方法是什么?

3
这个问题涉及到Swift集合类型,与Objective-C NS集合类型无关。例如,在Swift中如何实现这个功能?
NSArray *items = // some JSON response
NSArray *names = [items valueForKey:"firstName"];

注意:这个问题不是被很多人标记为重复的那个问题的副本,因为这个问题是关于Swift是否有一种新的方式来调用Swift集合类型上的valueForKey:。那个问题是关于如何在Swift 中使用Objective-C NS集合类型调用valueForKey:的。换句话说,这个问题解决了如何用新的Swift方式做事情,而不是用Objective-C的方式做Swift。此外,那个问题没有标记已接受的答案。

1
@san,这个问题并不是重复的,因为它探讨的是Swift在Swift集合类型上调用valueForKey:的新方法。而那个问题则是关于如何在Objective-C NS集合类型上调用valueForKey:。换句话说,这个问题探讨的是如何用新的Swift方式完成某些操作,而不是用Objective-C的方式来完成Swift。 - James Kuang
2个回答

7

在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

如果你在Swift中使用Objective-C的NS集合类型,如NSDictionary,那么你仍然可以使用Swift语法调用valueForKey:

let names = items.valueForKey("firstName")

Swift有自己的Dictionary类型,你可以使用dictionary["key"]吗? - Arc676
1
@Arc676 是的,这是 objectForKey: 的速记方式,但它并不是同一件事情。 - James Kuang

0

我猜你想处理一些JSON响应。看看SwiftyJSON。这是一个很好的处理JSON的方式。

你可以像这样做:

let json = JSON(jsonObject)

let name = json["firstName"].stringValue


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接