Я пытаюсь разобрать следующий JSON:Swift: flatMap в словарь
{
"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. Это на Github в Playground
В примере, они разбор Array
словарей с помощью typealias JSONDictionary = [String: AnyObject]
мне нужно разобрать Dictionary
, который имеет Key
, который String
и Value
, что является Array
. Следовательно: 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]]?) -> _?
Как я могу получить словарь с Keys
как String
и Values
как Array
? Я хотел бы поддерживать их подход Generic
.
Спасибо. Это не печатает «ключи»? Как получить ключи как 'key' и' value' как 'Array'? – user1107173
@ user1107173 Я обновил ответ, вы можете перейти к клавишам 'let keys = jsonString.flatMap {$ 0.0}' – Khundragpan
Примечание: нет необходимости использовать 'flatMap' для ключей, так как там не было попытки лить (просто' let keys = jsonString.map {$ 0.0} 'достаточно). В качестве альтернативы используйте свойство 'keys' словаря, чтобы получить ключи как ленивую коллекцию:' let keys = jsonString.keys'. – dfri