У меня есть загруженный файл JSON, который я пытаюсь .flatMap создать в массив созданных мною структур, но .flatMap не инициализирует данные в структуру.
Ниже проанализирована версия файла JSON, которая будет представлять одну структуру в массиве:
[["eventUri": <null>,
"wgt": 266482320,
"source": {
dataType = news;
title = WAFB;
uri = "wafb.com";
},
"uri": 885629090,
"body": A bunch of text,
"lang": eng,
"dateTime": 2018-06-12T06:52:00Z,
"date": 2018-06-12,
"sim": 0,
"isDuplicate": 1,
"title": Now a candidate, Romney appears to embrace Trump presidency,
"time": 06:52:00,
"url": http://www.wafb.com/story/38391905/now-a-candidate-romney-appears-to-embrace-trump-presidency,
"dataType": news]]
Это структура с общим экземпляром структур, а такжеметод flatMap.Все индексы инициализатора именуются в соответствии с ключами JSON:
struct Article {
static var sharedInstance: [Article] = [Article]()
// MARK: Properties
var dataType = ""
var date = ""
var eventUri = ""
var isDuplicate = false
var sourceName = ""
var lang = ""
var sim = 0.0
var time = ""
var articleTitle = ""
var image: UIImage? = nil
// MARK: Initializer
init?(dictionary: [String:AnyObject]) {
// GUARD: Do all dictionaries have values?
guard
let dataType = dictionary[EventRegistry.ParameterValues.dataType] as? String,
let date = dictionary[EventRegistry.ParameterValues.date] as? String,
let eventUri = dictionary[EventRegistry.ParameterValues.eventUri] as? String,
let isDuplicate = dictionary[EventRegistry.ParameterValues.isDuplicate] as? Bool,
let source = dictionary[EventRegistry.ParameterKeys.source] as? [String:Any],
let sourceName = source[EventRegistry.ParameterValues.sourceName] as? String,
let lang = dictionary[EventRegistry.ParameterValues.lang] as? String,
let sim = dictionary[EventRegistry.ParameterValues.sim] as? Double,
let time = dictionary[EventRegistry.ParameterValues.time] as? String,
let articleTitle = dictionary[EventRegistry.ParameterValues.articleTitle] as? String
// If not, return nil
else { return nil }
// Otherwise, initialize values
self.dataType = dataType
self.date = date
self.eventUri = eventUri
self.isDuplicate = isDuplicate
self.sourceName = sourceName
self.lang = lang
self.sim = sim
self.time = time
self.articleTitle = articleTitle
}
static func articlesFromResults(_ results: [[String:AnyObject]]) -> [Article] {
return results.flatMap(Article.init)
}
}
И это мой вызов для инициации метода flatMap, который не возвращает результата:
func getEventRegistrySearchResults(completionHandlerForSearchResults: @escaping (_ articles: [Article]?, _ errorString: String?) -> Void) {
taskForGetEventRegistrySearchResults(method: "", parameters: ["" : (Any).self]) { (result, error) in
if error != nil {
print("There was an error getting articles")
}
if let result = result {
if let articles = result["articles"] as? [String:AnyObject] {
if let articleResults = articles["results"] as? [[String:AnyObject]] {
Article.sharedInstance = Article.articlesFromResults(articleResults)
print(Article.sharedInstance.count) // Returns 0
}
} else {
completionHandlerForSearchResults(nil, "There was a problem")
}
}
}
}
Печать "articleResults"здесь приведен файл JSON выше, но когда я пытаюсь .flatMap его в мой массив структур, он не инициализирует ни один из них.Чего мне не хватает?