gpt4 book ai didi

Swift:从 flatMap 到字典

转载 作者:搜寻专家 更新时间:2023-10-30 23:05:56 24 4
gpt4 key购买 nike

我正在尝试解析以下 JSON:

{ 
"String For Key 1": [
"Some String A",
"Some String B",
"Some String C",
],
"String For Key 2": [
"Some String D",
"Some String E",
"Some String F"
],
"String For Key 3": [
"Some String G",
"Some String H",
"Some String I",
],
"String For Key 4": [
"Some String J",
"Some String K",
"Some String L"
],
"String For Key 5": [
"Some String M",
"Some String N",
"Some String O"
],
"String For Key 6": [
"Some String P",
"Some String Q",
"Some String R"
]
}

我也在关注这个tutorial .它在 Playground 的 Github 上

在示例中,他们使用 typealias JSONDictionary = [String: AnyObject]

解析字典的 Array

我需要解析一个 Dictionary,它有一个 KeyStringValue 是一个数组。因此:typealias JSONDictionary = [String: [AnyObject]] 并且在返回 flatMap 时出现错误。

extension Resource {
init(url: NSURL, parseJSON: AnyObject -> A?) {
self.url = url
self.parse = { data in
let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String: [AnyObject]]
//This is where I get an error
return json.flatMap(parseJSON)
}
}
}

错误:

Cannot convert value of type `AnyObject -> A? to expected argument type `([String: [AnyObject]]?) -> _?

如何获取KeysStringValuesArray的字典?我想保留他们的 Generic 方法。

最佳答案

jsonString 的类型是 Dictionary<String, Array<String>>你可以给它一个类似 Dictionary<String, AnyObject> 的类型

AnyObject 可以包含类和结构,即 Array , Dictionary , String , Int , 对象 C 类因此 Array<String>AnyObject 表示 [AnyObject]

let jsonString:[String: AnyObject] =
[
"String For Key 1": [
"http://www.urlToSomePathA.jpg",
"http://www.urlToSomePathB.jpg",
"http://www.urlToSomePathC.jpg",
],
"String For Key 2": [
"http://www.urlToSomePathD.jpg",
"http://www.urlToSomePathE.jpg",
"http://www.urlToSomePathF.jpg"
]
]

// Now you can map a function on the value type
let values = jsonString.flatMap { $0.1 as? [String] }
print(values)
// RESULT: [["http://www.urlToSomePathA.jpg", "http://www.urlToSomePathB.jpg", "http://www.urlToSomePathC.jpg"], ["http://www.urlToSomePathD.jpg", "http://www.urlToSomePathE.jpg", "http://www.urlToSomePathF.jpg"]]

更新

let keys = jsonString.flatMap { $0.0 } // ["String For Key 1", "String For Key 2"]

正如@dffri 所评论的,您可以在字典上使用 keys 属性,它将返回 LazyMapCollection只有访问里面的对象才会实现。

let keys = jsonString.keys

关于Swift:从 flatMap 到字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38810875/

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