Я получаю json из "файлы" в качестве ответа и хочу сохранить их в одном Array
. Поскольку я новичок в разработке swift
, я не могу понять, как это сделать. Любая помощь будет очень признательна. Я хочу их, как показано ниже
let myFileArray = [file1, file2.....]
Возможный дубликат Массив из словарных ключей в быстром
Вы должны создать соответствующие объекты и сохранить их в массиве, попробуйте использовать Codable из Swift 4
@RishabhShukla Ваш вопрос непонятен. Что вы хотите, чтобы в Array
все files
или все filesTypes
или еще что?
Пример: -response - это данные ваших веб-сервисов.
let data = responce as? [String:AnyObject]
let respArr = data["doc"] as? [AnyObject]
let responceData = respArr.first as? [String:AnyObject]
let nameChange = responceData["nameChange"] as? as! Array<Dictionary<String, Any>>
let strFileName = nameChange["file"] as? String
Print("\(nameChange.count),\(strFileName)")
Для этого можно использовать flatMap
или compactMap
, например:
Если вы используете swift 4.1, используйте compactMap
, иначе используйте flatMap
.
// Your dictionary
let dictionary = response as? [String: Any]
// Create an empty Array
var myFileArray = [String]()
// Get the doc array
if let docs = dictionary?["doc"] as? [[String: Any]] {
// for each doc array
for doc in docs {
// get the nameChange array
if let nameChange = doc["nameChange"] as? [[String: Any]] {
// convert the inner dictionary to string array
let fileNameArray = nameChange.compactMap { (dictionary) -> String? in
return dictionary["file"] as? String
}
// append the array into main array
myFileArray.append(contentsOf: fileNameArray)
}
}
}
// Here is your final string array of filename
print(myFileArray)
Спасибо, что сработало ..!
"doc": [{"nameChange": [{"file_type": "jpg", "file": "file.jpg"}, {"file_type": "jpg", " file": "file2) .jpg "} .. ..... это мой ответ