gpt4 book ai didi

objective-c - 使用 Swift 的 Map api 和 Objective-c 的 valueForKeyPath 过滤 json 对象

转载 作者:行者123 更新时间:2023-11-30 10:16:16 26 4
gpt4 key购买 nike

给定http://jsonplaceholder.typicode.com/users

为了简单起见,这里是 json 的缩写版本

var userDict: [[String, String]]?  <-- String json converts into foundation and saved here

// The Json
[{
"address" : {
"geo" : {
"lat" : "-37.3159"
}
}
}]

我正在尝试获取 lat 数组,它是地址地理点的纬度。我有两个选择,swift 或 Objective-c

我可以使用旧的 valueForKeyPath: 方法获取 lat 数组

var keypathLatitude: [String] = (userDict! as NSArray).valueForKeyPath("address.geo.lat") as! [String] // Objective-c api

这会给我 ["-37.3159"] 这是一个只有一个元素的数组。但我很难用 swift 的 map api 来做到这一点

var mapLatitude: [String] = userDict!.map({$0["address"]?["geo"]["lat"] as! String}) // <-- Does not like this.  But I want ["-37.3159"] as a result.

更新

var mapLatitude: [String] = userDict!.map({$0["address"]?["geo"]??["lat"] as! String})

根据 mattdaw 的建议,我添加了另一个“?”。它不起作用。奇怪的是,当我添加“??”时它似乎按预期工作。 .... 但为什么?这 '??'是 nil 合并运算符,不是吗?

顺便说一句,我正在做这个是 Playground

最佳答案

对于纯 Swift 对象,可选链接有效:

let users = [ [ "address": [ "geo": [ "lat": "-37.3159" ] ] ] ]
let lats = users.map { $0["address"]?["geo"]?["lat"] }
println(lats)

...但是当你处理通过 NSJSONSerialization 解析 JSON 的结果时,它会变得很难看。查看 SwiftyJSON ( https://github.com/lingoer/SwiftyJSON ) 了解更多背景信息。

关于objective-c - 使用 Swift 的 Map api 和 Objective-c 的 valueForKeyPath 过滤 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29815314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com